nginx代理服务器怎么设置
① 【NGINX入门】3.Nginx的缓存服务器proxy_cache配置
本文介绍NGINX缓存机制,配置和参数说明。
如图所示,nginx缓存,可以在一定程度上,减少源服务器的处理请求压力。因为静态文件(比如css,js, 图片)中,很多都是不经常更新的。nginx使用proxy_cache将用户的请求缓存到本地一个目录。下一个相同请求可以直接调取缓存文件,就不用去请求服务器了。毕竟,IO密集型服务的处理是nginx的强项。
Nginx的缓存加速功能是由proxy_cache(用于反向代理和静态缓存)和fastcgi_cache(php动态缓存)两个功能模块完成。
Nginx缓存特点:
先上个例子:
因为我是在一台服务器上做试验,所以用了两个端口 80 和 90 进行模拟两台服务器之间的交互。
接下来讲一下配置项:
这里我设置了 图片 、 css 、 js 静态资源进行缓存。
当用户输入 http://wangxiaokai.vip 域名时,解析得到 ip:port 的访问地址。 port 默认为80。所以页面请求会被当前server截取到,进行请求处理。
当解析到上述文件名结尾的静态资源,会到缓存区获取静态资源。
如果获取到对应资源,则直接返回数据。
如果获取不到,则将请求转发给 proxy_pass 指向的地址进行处理。
这里直接处理 90 端口接受到的请求,到服务器本地目录 /mnt/blog 下抓取资源进行响应。
细心的读者应该发现,我在第二段例子里,留了个彩蛋 add_header wall "hey!guys!give me a star." 。
add_header 是用于在报头设置自定义的信息。
所以,如果缓存有效的话,那么静态资源返回的报头,一定会带上这个信息。
(1)Nginx系列教程(3)nginx缓存服务器上的静态文件
https://yq.aliyun.com/articles/752967
(2)proxy_cache
nginx 反向代理之 proxy_cache https://www.cnblogs.com/yyxianren/p/10832172.html
(3)Nginx使用upstream负载均衡和proxy_cache缓存实现反向代理
https://blog.51cto.com/13770206/2163952
② 不容错过的Nginx配置详解,一文带你搞懂Nginx
Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现好。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。
需要客户自己在浏览器配置代理服务器地址。
例如:在大陆访问www.google.com,我们需要一个代理服务器,我们通过代理服务器去访问谷歌,这个过程就是正向代理。
反向代理,客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器ip地址。
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们说的负载均衡。
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
进入到下面的目录,然后使用命令
配置文件所在位置:/usr/local/nginx/conf/nginx.conf
由全局块+events块+http块组成
从配置文件开始到events之间的内容,主要会设置一些影响Nginx服务器整体运行的配置指令,主要包括配置运行Nginx服务器的用户(组)、允许生成的worker process数,进程pid存放路径、日志存放路径和类型以及配置文件的引入等。
events块设计的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个work process可以同时支持的最大连接数等。下面的例子表示每个work process支持的最大连接数为1024。这部分配置对Nginx的性能影响较大,在实际中应该灵活配置。
Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,http块又包括http全局块和server块。
http全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。
每个server块也可以分为全局server块,以及可以同时包含多个location块。
最常见的配置时本虚拟主机的监听配置和本虚拟主机的名称或IP配置。
一个server块可以配置多个location块。
这块的主要作用是基于Nginx服务器接收到的请求字符串(例如server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如前面的/uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
访问http://ip,访问到的是Tomcat的主页面http://ip:8080。
Nginx+JDK8+Tomcat
访问:http://192.168.71.167/,看到的是Tomcat的首页。
根据访问的路径跳转到不同的服务器中去。
访问http://ip:9001/e 直接跳到http://127.0.0.1:8080/e
访问http://ip:9001/vod 直接跳到http://127.0.0.1:9090/vod
Nginx+JDK8+配置两个Tomcat,Tomcat的配置不再讲述。
访问http://192.168.71.167:9001/e/a.html跳到了http://127.0.0.1:8080/e/a.html页面。
访问http://192.168.71.167:9001/vod/a.html跳到了http://127.0.0.1:9090/vod/a.html页面。
假如Nginx代理服务器Server的配置为:192.168.71.167:9001,跳到:127.0.0.1:8080,访问者的IP为:192.168.71.200:20604。
通过访问http://192.168.71.167/e/a.html,实现负载均衡的效果,平均分摊到8080和8081端口中。
Nginx+JDK8+2台Tomcat,一台8080,一台8081。
访问:http://192.168.71.167/e/a.html,8080和8081交替访问。
1 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2 weight
weight代表权重,默认为1,权重越高被分配的客户端越多。
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3 ip_hash
每个请求按访问IP的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,示例如下:
4 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
访问图片:http://192.168.71.167/image/1.jpg
访问页面:http://192.168.71.167/www/a.html
访问目录:http://192.168.71.167/image/(因为设置了autoindex on;)
两台机器,每台机器都装有keepalived+Nginx+Tomcat。
主备keepalived服务器中只有master一台机器会出现VIP地址,否则会出现脑裂问题。
【提示】脚本要加+x的执行权限:chmod +x chk_nginx.sh
在Nginx里把虚拟IP配置进去即可。
一个Nginx是由一个master进程和多个worker进程组成的。
客户端发送请求到Master,然后给worker,再由这些work争抢处理这个请求。
1 可以使用nginx -s reload进行热部署方式;
2 每个worker是独立的进程,如果有其中的一个worker出现了问题,其他worker独立的继续进行争抢,实现请求的过程,不会造成服务的中断;
Nginx和Redis类似,都采用了io多路复用机制。每个worker进程都可以把CPU发挥到极致,一般来说worker数和服务器的CPU数相等是最为适宜的。
发送请求:访问静态资源占用2个连接,反向代理占用4个连接。
【温馨提示】
③ 如何在 centos 7/cpanel 服务器上配置 nginx 反向代理
注:本配置环境在CentOS下实现,其他方法请参考官方帮助文件
一、安装Nginx软件
Nginx官方网站:http://nginx.org
我们使用yum安装(配置和升级方便),需要配置官方的yum源,Nginx官方源配置提供的配置方法如下:
1.创建一个更新源
#vim /etc/yum.repos.d/nginx.repo
2.加入如下内容:
[nginx]
name=nginx repo baseurl=http://nginx.org/packages/OS/EOSRELEAS/$basearch/
gpgcheck=0
enabled=1
3.把上面蓝色字段换成的操作系统类型,比如rhel或者centos,把绿色部分替换成发行的主版本号,比如“5” 或者 “6”, 分别代表 5.x 或 6.x 对应的版本。
其他版本的系统(Debian/Ubuntu)也可以参考nginx官方的方法配置(英文内容)。
4.配置完以上三部,就可以开始用我们熟悉的yum命令安装nginx了(默认安装最新的nginx稳定发行版本)。
#yum install nginx
5.安装完毕看看都生成了哪些文件,配置文件都放在哪里
#rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/etc/nginx/conf.d/example_ssl.conf
/etc/nginx/fastcgi_params
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/etc/nginx/win-utf
/etc/rc.d/init.d/nginx
/etc/sysconfig/nginx
/usr/sbin/nginx
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx
以上是我安装完的配置文件位置,安装的版本是1.4.2版本(查看版本:nginx -v) ,如下图:
6.检查是否安装成功
启动nginx服务,输入服务器ip访问是否能打开默认网站:
#service nginx restart
如果nginx服务启动成功,但打不开网站,排除如果不是网络问题,可能是因为iptables,iptables开放80端口即可:
#vim /etc/sysconfig/iptables
加入:-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT 如下图:
二、配置文件
1.由上面的步骤,我们看到配置文件放置在/etc/nginx/目录下:
主要配置文件:/etc/nginx/nginx.conf 内容如下图
扩展配置文件:/etc/nginx/conf.d/*.conf
图中的主配置文件的末尾,加载所有扩展配置文件里面以.conf结尾的文件。所以我们不要修改主要配置文件(不需要修改),用户配置都放到了/etc/nginx/conf.d/目录下,里面默认有两个配置文件,一个普通的配置,一个是ssl配置。
2.为一个域名配置一个文件(文件名任意,以.conf结尾即可)
#cd /etc/nginx/conf.d/
#vim www.test.com.conf
把内容修改如下:
---------------------------------------------------------------------------
server {
listen 80;
server_name www.test.com;
charset utf8;
access_log /var/log/nginx/www.test.com.access.log main;
location / {
proxy_pass http://192.168.1.20:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
---------------------------------------------------------------------------
如图:
3.重启nginx服务,检查配置文件并生效(nginx -t)
#service nginx restart
4.如果没出意外,你应该已经成功实现Nginx反向代理服务了!
三、其他帮助
1.帮助命令
2.官方帮助文档:http://nginx.org/en/docs/
④ Nginx 最全操作——nginx反向代理(5)
将 NGINX 配置为 HTTP 和其他协议的反向代理,支持修改请求标头和微调的响应缓冲。
本文介绍代理服务器的基本配置。您将学习如何通过不同的协议将请求从 NGINX 传递到代理服务器,修改发送到代理服务器的客户端请求标头,以及配置来自代理服务器的响应的缓冲。
代理通常用于在多个服务器之间分配负载,无缝显示来自不同网站的内容,或通过 HTTP 以外的协议将处理请求传递给应用程序服务器。
当 NGINX 代理请求时,它会将请求发送到指定的代理服务器,获取响应,然后将请求发送回客户端。可以使用指定的协议将请求代理到 HTTP 服务器(另一个 NGINX 服务器或任何其他服务器)或非 HTTP 服务器(可以运行使用特定框架开发的应用程序,例如 PHP 或 Python)。支持的协议包括FastCGI、uwsgi、SCGI和memcached。
要将请求传递给 HTTP 代理服务器,需要在location中指定proxy_pass指令。例如:
此示例配置导致将在此位置处理的所有请求传递到指定地址的代理服务器。此地址可以指定为域名或者 IP 地址。该地址还可能包括一个端口:
注意,在上面的第一个例子中,代理的服务器的地址后面是一个URI, /link/ 。如果 URI 与地址一起指定,它将替换请求 URI 中与 location 参数匹配的部分。例如,这里带有 /some/path/page.html URI的请求将被代理到 http://www.example.com/link/page.html . 如果指定的地址没有问题 URI,或者无法确定要替换的 URI 部分,则传递完整的请求 URI(可能已修改)。
要将请求传递给非 HTTP 代理服务器, **_pass 应使用适当的指令:
请注意,在这些情况下,指定地址的规则可能不同。您可能还需要将其他参数传递给服务器(有关详细信息,请参阅参考文档)。
proxy_pass指令也可以指向一组命名的服务器。在这种情况下,请求根据指定的方法在组中的服务器之间分发。
默认情况下,NGINX 重新定义代理请求中的两个 header 字段,“Host”和“Connection”,并消除值为空字符串的 header 字段。“Host”设置为 $proxy_host 变量,“Connection”设置为 close 。
要更改这些设置以及修改其他标头字段,请使用proxy_set_header指令。该指令可以在某个位置或更高位置指定。它也可以在特定的服务器上下文或http块中指定。例如:
在此配置中,“主机”字段设置为$host变量。
要防止标头字段被传递到代理服务器,请将其设置为空字符串,如下所示:
默认情况下,NGINX 缓冲来自代理服务器的响应。响应存储在内部缓冲区中,并且在收到整个响应之前不会发送到客户端。缓冲有助于优化慢速客户端的性能,如果响应从 NGINX 同步传递到客户端,这可能会浪费代理服务器的时间。但是,当启用缓冲时,NGINX 允许代理服务器快速处理响应,而 NGINX 存储响应的时间与客户端下载它们所需的时间一样长。
负责启用和禁用缓冲的指令是proxy_buffering。默认情况下,它设置为 on 并启用缓冲器。
该proxy_buffers指令控制规模和分配的请求缓冲区的数目。来自代理服务器的响应的第一部分存储在单独的缓冲区中,其大小由proxy_buffer_size指令设置。这部分通常包含一个相对较小的响应头,并且可以做得比其余响应的缓冲区小。
在以下示例中,缓冲区的默认数量增加了,并且响应的第一部分的缓冲区大小小于默认值。
如果禁用缓冲,则在从代理服务器接收响应的同时将响应同步发送到客户端。对于需要尽快开始接收响应的快速交互客户端,此行为可能是可取的。
要在特定位置禁用缓冲,请将proxy_buffering指令放在带有参数的位置 off ,如下所示:
在这种情况下,NGINX 仅使用proxy_buffer_size配置的缓冲区来存储响应的当前部分。
反向代理的一个常见用途是提供负载平衡。阅读免费的选择软件负载均衡器的五个理由电子书,了解如何通过快速部署来提高功能、性能和专注于您的应用程序。
如果您的代理服务器有多个网络接口,有时您可能需要选择特定的源 IP 地址连接到代理服务器或上游。如果 NGINX 后面的代理服务器配置为接受来自特定 IP 网络或 IP 地址范围的连接,这可能很有用。
指定proxy_bind指令和必要网络接口的 IP 地址:
IP 地址也可以用变量指定。例如, $server_addr 变量传递接受请求的网络接口的 IP 地址:
简单来说,把网络首页代理到/test路径,同时把java代理到/testapi,配置如下:
参考链接:https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/
欢迎大家提出不一样的观点,我们一起讨论,
我是辣个男人,一个运维人。
⑤ 求助关于centos6.6搭建nginx反向代理服务器
〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持);
〉另外一个功能就是作为反向代理服务器实现负载均衡
以下我们就来举例说明如何使用 nginx 实现负载均衡。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也可以实现对多台app server的反向代理和负载均衡,但是在并发处理方面apache还是没有 nginx擅长。
1)环境:
a. 我们本地是Windows系统,然后使用VirutalBox安装一个虚拟的Linux系统。
在本地的Windows系统上分别安装nginx(侦听8080端口)和apache(侦听80端口)。在虚拟的Linux系统上安装apache(侦听80端口)。
这样我们相当于拥有了1台nginx在前端作为反向代理服务器;后面有2台apache作为应用程序服务器(可以看作是小型的server cluster。;-) );
b. nginx用来作为反向代理服务器,放置到两台apache之前,作为用户访问的入口;
nginx仅仅处理静态页面,动态的页面(php请求)统统都交付给后台的两台apache来处理。
也就是说,可以把我们网站的静态页面或者文件放置到nginx的目录下;动态的页面和数据库访问都保留到后台的apache服务器上。
c. 如下介绍两种方法实现server cluster的负载均衡。
我们假设前端nginx(为127.0.0.1:80)仅仅包含一个静态页面index.html;
后台的两个apache服务器(分别为localhost:80和158.37.70.143:80),一台根目录放置phpMyAdmin文件夹和test.php(里面测试代码为print “server1“;),另一台根目录仅仅放置一个test.php(里面测试代码为 print “server2“;)。
2)针对不同请求 的负载均衡:
a. 在最简单地构建反向代理的时候 (nginx仅仅处理静态不处理动态内容,动态内容交给后台的apache server来处理),我们具体的设置为:在nginx.conf中修改:
复制代码 代码如下:
location ~ \.php$ {
proxy_pass 158.37.70.143:80 ;
}
〉 这样当客户端访问localhost:8080/index.html的时候,前端的nginx会自动进行响应;
〉当用户访问localhost:8080/test.php的时候(这个时候nginx目录下根本就没有该文件),但是通过上面的设置 location ~ \.php$(表示正则表达式匹配以.php结尾的文件,详情参看location是如何定义和匹配的 http://wiki.nginx.org/NginxHttpCoreMole) ,nginx服务器会自动pass给 158.37.70.143的apache服务器了。该服务器下的test.php就会被自动解析,然后将html的结果页面返回给nginx,然后 nginx进行显示(如果nginx使用memcached模块或者squid还可以支持缓存),输出结果为打印server2。
如上是最为简单的使用nginx做为反向代理服务器的例子;
b. 我们现在对如上例子进行扩展,使其支持如上的两台服务器。
我们设置nginx.conf的server模块部分,将对应部分修改为:
复制代码 代码如下:
location ^~ /phpMyAdmin/ {
proxy_pass 127.0.0.1:80 ;
}
location ~ \.php$ {
proxy_pass 158.37.70.143:80 ;
}
上面第一个部分location ^~ /phpMyAdmin/,表示不使用正则表达式匹配(^~),而是直接匹配,也就是如果客户端访问的 URL是以http://localhost:8080/phpMyAdmin/ 开头的话(本地的nginx目录下根本没有phpMyAdmin目录),nginx会自动pass到127.0.0.1:80 的Apache服务器,该服务器对phpMyAdmin目录下的页面进行解析,然后将结果发送给nginx,后者显示;
如果客户端访问URL是http://localhost/test.php 的话,则会被pass到158.37.70.143:80 的apache进行处理。
因此综上,我们实现了针对不同请求的负载均衡。
〉如果用户访问静态页面index.html,最前端的nginx直接进行响应;
〉如果用户访问test.php页面的话,158.37.70.143:80 的Apache进行响应;
〉如果用户访问目录phpMyAdmin下的页面的话,127.0.0.1:80 的Apache进行响应;
3)访问同一页面 的负载均衡:
即用户访问http://localhost:8080/test.php 这个同一页面的时候,我们实现两台服务器的负载均衡 (实际情况中,这两个服务器上的数据要求同步一致,这里我们分别定义了打印server1和server2是为了进行辨认区别)。
a. 现在我们的情况是在windows下nginx是localhost侦听8080端口;
两台apache,一台是127.0.0.1:80(包含test.php页面但是打印server1),另一台是虚拟机的158.37.70.143:80(包含test.php页面但是打印server2)。
b. 因此重新配置nginx.conf为:
〉首先在nginx的配置文件nginx.conf的http模块中添加,服务器集群server cluster(我们这里是两台)的定义:
复制代码 代码如下:
upstream myCluster {
server 127.0.0.1:80 ;
server 158.37.70.143:80 ;
}
表示这个server cluster包含2台服务器
〉然后在server模块中定义,负载均衡:
复制代码 代码如下:
location ~ \.php$ {
proxy_pass http://myCluster ; #这里的名字和上面的cluster的名字相同
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
这样的话,如果访问http://localhost:8080/test.php 页面的话,nginx目录下根本没有该文件,但是它会自动将其pass到myCluster定义的服务区机群中,分别由127.0.0.1:80;或者158.37.70.143:80;来做处理。
上面在定义upstream的时候每个server之后没有定义权重,表示两者均衡;如果希望某个更多响应的话例如:
复制代码 代码如下:
upstream myCluster {
server 127.0.0.1:80 weight=5;
server 158.37.70.143:80 ;
}
这样表示5/6的几率访问第一个server,1/6访问第二个。另外还可以定义max_fails和fail_timeout等参数。
综上,我们使用nginx的反向代理服务器reverse proxy server的功能,将其布置到多台apache server的前端。
nginx仅仅用来处理静态页面响应和动态请求的代理pass,后台的apache server作为app server来对前台pass过来的动态页面进行处理并返回给nginx。
通过以上的架构,我们可以实现nginx和多台apache构成的机群cluster的负载均衡。
两种均衡:
1)可以在nginx中定义访问不同的内容,代理到不同的后台server; 如上例子中的访问phpMyAdmin目录代理到第一台server上;访问test.php代理到第二台server上;
2)可以在nginx中定义访问同一页面,均衡 (当然如果服务器性能不同可以定义权重来均衡)地代理到不同的后台server上。 如上的例子访问test.php页面,会均衡地代理到server1或者server2上。
实际应用中,server1和server2上分别保留相同的app程序和数据,需要考虑两者的数据同步。
⑥ nginx如何配置代理
nginx源码: https://trac.nginx.org/nginx/browser
nginx官网: http://www.nginx.org/
... #全局块
events { #events块
...
}
http #http块
{
}
1、全局块:全局模块影响nginx的全局指令,一般有运行nginx服务器的用户,nginx进程pid存放路劲,日志存放路径,配置文件引入,允许生成worker,process数。
2、events块:配置影响nginx服务器或与用户的网络连接, ,有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个连接,开启多个网络连接序列化。
3、http块:可以嵌套多个server,配置代理,缓存
4、server块:配置虚拟主机参数,一个http中有多个server
5、location块:配置请求的路由。
########### 每个指令必须有分号结束。#################
error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:
debug|info|notice|warn|error|crit|alert|emerg
events {
} http {
}
四、nginx的简单命令
五、配置解析
server {
1、location 支持配置项目的绝对路径
2、假设我们的后台API地址是以API开头,location ^~ /user/ 代表nginx将会拦截请求地址中包含"/user/"字样的请求,其实这就是我们的ajax请求路径,拦截到请求之后根据写法会分成两种情况把这个请求转发到 下面 proxy_pass 的地址上。
举个例子:
a、如上图,如果proxy_pass 的URL以 / 结尾 ,那么请求转发的时候 将 不会 带上 匹配到的 /api/ ,也就是说如果 登录请求 URL是 localhost:80/user/login,proxy_pass URL 是 http://a.xx.com:8080/platform/, Nginx将会 把这个请求转发成 http://a.xx.com:8080/platform/user/login
b、如果proxy_pass 的URL不以 / 结尾 ,那么请求转发的时候 将 会带上 匹配到的 /user/ ,也就是说如果 登录请求 URL是 localhost:60001/user/login,proxy_pass URL 是 http://a.xx.com:8080/platform/, Nginx将会 把这个请求转发成 http://a.xx.com:8080/user/login
3、一般我们登录之后服务器会通过Set-Cookie把token写回到我们本地,如果不设置 proxy_cookie_path 的话,服务器Set-Cookie命令会失效,本地存不了cookie,从而导致token丢失。
这里proxy_cookie_path有一点需要注意的是 如果 proxy_pass URL 是 http://a.xx.com:8080/user/ 这种情况 proxy_cookie_path应该设置成 /platform/ / (注意两个斜杠之间有空格)。
如果 proxy_pass URL 是 http://a.xx.com:8080/这种情况 proxy_cookie_path应该设置成 / / (注意两个斜杠之间有空格)
语法规则:location [=| | *|^~] /uri/ { … }
⑦ 安全开发运维必备的Nginx代理Web服务器性能优化与安全加固配置
为了更好的指导部署与测试艺术升系统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_mole模块
nginx可以用来请求路由到FastCGI服务器运行应用程序由各种框架和PHP编程语言等。可以开启FastCGI的缓存功能以及将静态资源进行剥离,从而提高性能。
keepalive模块
长连接对性能有很大的影响,通过减少CPU和网络开销需要开启或关闭连接;
http_ssl_mole模块
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_mole,然后后端程序采用JAVA(request.getAttribute("X-Real-IP"))进行获取;
描述: 如果要使用geoip地区选择,我们需要再nginx编译时加入 --with-http_geoip_mole 编译参数。
描述: 为了防止外部站点引用我们的静态资源,我们需要设置那些域名可以访问我们的静态资源。
描述: 下面收集了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
⑧ nginx基本配置(参考)
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。
1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
5、location块:配置请求的路由,以及各种页面的处理情况。
6、缓存控制字段cache-control的配置说明 ( https://www.cnblogs.com/kevingrace/p/10459429.html )
HTTP协议的Cache -Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程。
请求时的缓存指令包括: no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached等。
响应消息中的指令包括: public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。
no-cache: 数据内容不能被缓存, 每次请求都重新访问服务器, 若有max-age, 则缓存期间不访问服务器.
no-store: 不仅不能缓存, 连暂存也不可以(即: 临时文件夹中不能暂存该资源).
private(默认): 只能在浏览器中缓存, 只有在第一次请求的时候才访问服务器, 若有max-age, 则缓存期间不访问服务器.
public: 可以被任何缓存区缓存, 如: 浏览器、服务器、代理服务器等.
max-age: 相对过期时间, 即以秒为单位的缓存时间.
no-cache, private: 打开新窗口时候重新访问服务器, 若设置max-age, 则缓存期间不访问服务器.
设置以分钟为单位的绝对过期时间, 优先级比Cache-Control低, 同时设置Expires和Cache-Control则后者生效. 也就是说要注意一点: Cache-Control的优先级高于Expires
expires起到控制页面缓存的作用,合理配置expires可以减少很多服务器的请求, expires的配置可以在http段中或者server段中或者location段中. 比如控制图片等过期时间为30天
客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。
"它代理的是客户端,代客户端发出请求",是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
正向代理的用途:
(1)访问原来无法访问的资源,如Google
(2) 可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。
客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。
反向代理,"它代理的是服务端,代服务端接收请求",主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。
反向代理的作用:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载