如何运用Nginx搭建代理服务器?

如何运用Nginx搭建代理服务器?,第1张

如何实现Nginx的反向代理?

这句话什么意思?

意思是说当客户机来访问服务器的时候,服务器本身并不出面接待,而是将客户的请求转高给手下的子服务器(小弟)负责接待。

比如:你访问www.baidu.com,其实并不时百度总服务器接待的你,而是百度的代理服务器接待的你,不过他们的服务是一样的,提供同样的页面;

如是搭建Nginx服务才能实现这样的效果呢?

搭建一个最简单,最基础nginx代理服务器,需要一台代理服务,两台子服务器,XX台客户机来作验证;

操作流程如下:

第一步、服务器和客户机配好IP地址,其中Nginx代理服务器需要配置两张网卡,两个IP地址,一个和客户机通信,一个和子服务器通信;

代理服务器与客户机和子服务器都分别配置同网段IP地址;

例如:

代理服务器:192.168.4.5    192.168.2.5

子服务器         :192.168.2.100    192.168.2.200

客户机    :192.168.4.10

这样配置的好处是: 可以负载均衡,保障用户的访问体验,保障上网速度,同时也保障了,即便有一台服务器坏掉了,另一台服务可以接待用户访问;

第二步、代理服务器上安装Nginx服务软件,两台子服务器上安装HTTPD服务并写入相应的网页,然后启动服务;

yum  -y install  httpd        ##安装httpd服务;

echo  "罗贵"  >   /var/www/html/index.html       ##写一个简单的网页

./configure    --user=nginx    --group=nginx   --with-http_ssl_module

make   &&  make   install     ##编译安装Nginx

第三步、修改Nginx的配置文件

vim   /usr /local /nginx /conf /nginx.conf

http   {  ...............    ##在文件中找到http开头的行,并在http下面随意找两行添加下面两行的内容;

            upstream    luogui    {        ##luogui是集群名字,可以自由定义,upstream 上游的意思;翻译过来就是在上游建立一个名字为luogui的集群,集群中包含下述IP地址;

                      server   192.168.2.100:80

                      server    192.168.2.200:80

}

server    {

        listen        80

        server_name   www.luogui.com    ##域名,可以自由定义;

location   ^/.php$  {    ##匹配网页地址的意思,匹配以 / 开头.php结尾的网页文件;

        proxy_pass  http://luogui       ##通过proxy代理服务器将用户的请求转发给luogui集群服务器;(注:优先级最高,系统会优先处理这条命令)

             }

                             }

第四步、测试效果;

firefox   http://192.168.4.5  或者  本地测试   curl  http://192.168.4.5 

结果应该是暂停任何一台子服务器,客户机访问网页都没有问题;

以上.......

                                                    (EDN)

祝:开心!

罗贵

2019-04-05于深圳

Nginx是一个高性能的Web和反向代理服务器,它具有有很多非常优越的特性:

作为负载均衡服务器 :Nginx既可以在内部直接支持Rails和PHP,也可以支持作为HTTP代

理服务器对外进行服务。Nginx用C编写,不论是系统资源开销还是CPU使用效率都比

Perlbal要好的多。

作为邮件代理服务器 :Nginx同时也是-一个非常优秀的邮件代理服务器(最早开发这个产品的目的之-也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

Nginx安装非常的简单,配置文件非常简洁(还能够支持per语法),Bugs非 常少的服务器:

Nginx启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启

动。你还能够在不间断服务的情况下进行软件版本的升级。

处理静态文件,索引文件以及自动索引

反向代理加速(无缓存), 简单的负载均衡和容错

FastCGI,简单的负载均衡和容错

模块化的结构。过滤器包括gzipping, byte ranges, chunked responses,以及SSiI-ilter 。

在SSI过滤器中,到同一个proxy或者FastCGI的多个子请求并发处理

SSL和TLSSNI支持

使用外部HTTP认证服务器重定向用户到IMAP/POP3后端

使用外部HTTP认证服务器认证用户后连接重定向到内部的SMTP后端

认证方法:

POP3: POP3 USER/PASS, APOP, AUTH LOGIN PL AIN CRAM-MD5

IMAP: IMAP LOGIN

SMTP: AUTH LOGIN PLAIN CRAM-MD5

SSL支持

在IMAP和POP3模式下的STARTTLS和STLS支持

FreeBSD 3.x, 4.x, 5.x, 6.x i386FreeBSD 5.x, 6.x amd64

Linux2.2, 2.4, 2.6 i386Linux 2.6 amd64

Solaris 8 i386Solaris 9 i386 and sun4uSolaris 10 i386

MacOS X (10.4) PPC

一个主进程和多个工作进程。工作进程是单线程的,且不需要特殊授权即可运行

kqueue (FreeBSD 4.1+), epoll (Linux 2.6+), t signals (Linux 2.2.19+), /dev/poll (Solaris711/99+), select,以及poll支持

kqueue支持的不同功能包括EV_ _CLEAR, EV_ DISABLE (临时禁止事件),NOTE_ _LOWAT, EV_ EOF, 有效数据的数目,错误代码

sendfile (FreeBSD 3.1+), sendfile (Linux 2.2+), sendfile64 (Linux 2.4.21+),和sendfilev(Solaris 8 7/01+)支持

输入过滤(FreeBSD 4.1+)以及TCP_ _DEFER_ ACCEPT (Linux2.4+)支持

10,000 非活动的HTTP keep-alive连接仅需要2.5M内存。

最小化的数据拷贝操作

基于IP和名称的虚拟主机服务

Memcached的GET接口

支持keep-alive和管道连接

灵活简单的配置

重新配置和在线升级而无须中断客户的工作进程

可定制的访问日志,日志写入缓存,以及快捷的日志回卷

4xx-5xx错误代码重定向

基于PCRE的rewrite重写模块

基于客户端IP地址和HTTP基本认证的访问控制

PUT, DELETE,和MKCOL方法

支持FLV (Flash视频)

带宽限制

内嵌的perl

通过aio. read() 1 aio _write() 的套接字工作的实验模块,仅在FreeBSD下。

对线程的实验化支持,FreeBSD 4.x的实现基于rfork()

Nginx主要的英语站点是htp://sysoev.ru/en/

本人有自己整理大数据学习的功课,闲置着也无用了。

获取方式:

私信方式:

第一步,点击头像。

第二部:头像旁边有一个私信按钮,发送{学习资料}即可!

为了更好的指导部署与测试艺术升系统nginx网站服务器高性能同时下安全稳定运行,需要对nginx服务进行调优与加固

本次进行Nginx服务调优加固主要从以下几个部分:

本文档仅供内部使用,禁止外传,帮助研发人员,运维人员对系统长期稳定的运行提供技术文档参考。

Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx作为负载均衡服务器, Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。

Nginx版本选择:

项目结构:

Nginx文档帮助: http://nginx.org/en/docs/

Nginx首页地址目录: /usr/share/nginx/html

Nginx配置文件:

localtion 请求匹配的url实是一个正则表达式:

Nginx 匹配判断表达式:

例如,匹配末尾为如下后缀的静态并判断是否存在该文件, 如不存在则404。

查看可用模块编译参数:http://nginx.org/en/docs/configure.html

http_gzip模块

开启gzip压缩输出(常常是大于1kb的静态文件),减少网络传输

http_fastcgi_module模块

nginx可以用来请求路由到FastCGI服务器运行应用程序由各种框架和PHP编程语言等。可以开启FastCGI的缓存功能以及将静态资源进行剥离,从而提高性能。

keepalive模块

长连接对性能有很大的影响,通过减少CPU和网络开销需要开启或关闭连接

http_ssl_module模块

Nginx开启支持Https协议的SSL模块

Linux内核参数部分默认值不适合高并发,Linux内核调优,主要涉及到网络和文件系统、内存等的优化,

下面是我常用的内核调优配置:

文件描述符

文件描述符是操作系统资源,用于表示连接、打开的文件,以及其他信息。NGINX 每个连接可以使用两个文件描述符。

例如如果NGINX充当代理时,通常一个文件描述符表示客户端连接,另一个连接到代理服务器,如果开启了HTTP 保持连接,这个比例会更低(译注:为什么更低呢)。

对于有大量连接服务的系统,下面的设置可能需要调整一下:

精简模块:Nginx由于不断添加新的功能,附带的模块也越来越多,建议一般常用的服务器软件使用源码编译安装管理

(1) 减小Nginx编译后的文件大小

(2) 指定GCC编译参数

修改GCC编译参数提高编译优化级别稳妥起见采用 -O2 这也是大多数软件编译推荐的优化级别。

GCC编译参数优化 [可选项] 总共提供了5级编译优化级别:

常用编译参数:

缓存和压缩与限制可以提高性能

NGINX的一些额外功能可用于提高Web应用的性能,调优的时候web应用不需要关掉但值得一提,因为它们的影响可能很重要。

简单示例:

1) 永久重定向

例如,配置 http 向 https 跳转 (永久)

nginx配置文件指令优化一览表

描述:Nginx因为安全配置不合适导致的安全问题,Nginx的默认配置中存在一些安全问题,例如版本号信息泄露、未配置使用SSL协议等。

对Nginx进行安全配置可以有效的防范一些常见安全问题,按照基线标准做好安全配置能够减少安全事件的发生,保证采用Nginx服务器系统应用安全运行

Nginx安全配置项:

温馨提示: 在修改相应的源代码文件后需重新编译。

设置成功后验证:

应配置非root低权限用户来运行nginx服务,设置如下建立Nginx用户组和用户,采用user指令指运行用户

加固方法:

我们应该为提供的站点配置Secure Sockets Layer Protocol (SSL协议),配置其是为了数据传输的安全,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

不应使用不安全SSLv2、SSLv3协议即以下和存在脆弱性的加密套件(ciphers), 我们应该使用较新的TLS协议也应该优于旧的,并使用安全的加密套件。

HTTP Referrer Spam是垃圾信息发送者用来提高他们正在尝试推广的网站的互联网搜索引擎排名一种技术,如果他们的垃圾信息链接显示在访问日志中,并且这些日志被搜索引擎扫描,则会对网站排名产生不利影响

加固方法:

当恶意攻击者采用扫描器进行扫描时候利用use-agent判断是否是常用的工具扫描以及特定的版本,是则返回错误或者重定向

Nginx支持webdav,虽然默认情况下不会编译。如果使用webdav,则应该在Nginx策略中禁用此规则。

加固方法: dav_methods 应设置为off

当访问一个特制的URL时,如"../nginx.status",stub_status模块提供一个简短的Nginx服务器状态摘要,大多数情况下不应启用此模块。

加固方法:nginx.conf文件中stub_status不应设置为:on

如果在浏览器中出现Nginx自动生成的错误消息,默认情况下会包含Nginx的版本号,这些信息可以被攻击者用来帮助他们发现服务器的潜在漏洞

加固方法: 关闭"Server"响应头中输出的Nginx版本号将server_tokens应设置为:off

client_body_timeout设置请求体(request body)的读超时时间。仅当在一次readstep中,没有得到请求体,就会设为超时。超时后Nginx返回HTTP状态码408(Request timed out)。

加固方法:nginx.conf文件中client_body_timeout应设置为:10

client_header_timeout设置等待client发送一个请求头的超时时间(例如:GET / HTTP/1.1)。仅当在一次read中没有收到请求头,才会设为超时。超时后Nginx返回HTTP状态码408(Request timed out)。

加固方法:nginx.conf文件中client_header_timeout应设置为:10

keepalive_timeout设置与client的keep-alive连接超时时间。服务器将会在这个时间后关闭连接。

加固方法:nginx.conf文件中keepalive_timeout应设置为:55

send_timeout设置客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,Nginx就会关闭连接。

加固方法:nginx.conf文件中send_timeout应设置为:10

GET和POST是Internet上最常用的方法。Web服务器方法在RFC 2616中定义禁用不需要实现的可用方法。

加固方法:

limit_zone 配置项限制来自客户端的同时连接数。通过此模块可以从一个地址限制分配会话的同时连接数量或特殊情况。

加固方法:nginx.conf文件中limit_zone应设置为:slimits $binary_remote_addr 5m

该配置项控制一个会话同时连接的最大数量,即限制来自单个IP地址的连接数量。

加固方法:nginx.conf 文件中 limit_conn 应设置为: slimits 5

加固方法:

加固方法:

解决办法:

描述后端获取Proxy后的真实Client的IP获取需要安装--with-http_realip_module,然后后端程序采用JAVA(request.getAttribute("X-Real-IP"))进行获取

描述: 如果要使用geoip地区选择,我们需要再nginx编译时加入 --with-http_geoip_module 编译参数。

描述: 为了防止外部站点引用我们的静态资源,我们需要设置那些域名可以访问我们的静态资源。

描述: 下面收集了Web服务中常规的安全响应头, 它可以保证不受到某些攻击,建议在指定的 server{} 代码块进行配置。

描述: 为了防止某些未备案的域名或者恶意镜像站域名绑定到我们服务器上, 导致服务器被警告关停,将会对业务或者SEO排名以及企业形象造成影响,我们可以通过如下方式进行防范。

执行结果:

描述: 有时你的网站可能只需要被某一IP或者IP段的地址请求访问,那么非白名单中的地址访问将被阻止访问, 我们可以如下配置

常用nginx配置文件解释:

(1) 阿里巴巴提供的Concat或者Google的PageSpeed模块实现这个合并文件的功能。

(2) PHP-FPM的优化

如果您高负载网站使用PHP-FPM管理FastCGI对于PHP-FPM的优化非常重要

(3) 配置Resin on Linux或者Windows为我们可以打开 resin-3.1.9/bin/httpd.sh 在不影响其他代码的地方加入:-Dhttps.protocols=TLSv1.2, 例如

原文地址: https://blog.weiyigeek.top/2019/9-2-122.html


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/388251.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存