nginx反向代理详解
反向代理功能是nginx的三大主要功能之一(负载均衡、反向代理、静态web服务器)。nginx一般同时做为静态web服务器和反向代理服务器,做为web服务器访问静态文件图片、css、js、html等文件,做为反向代理服务器把请求发给后端业务处理服务,如果有多个后端处理节点,会配置负载均衡功能。
什么是反向代理服务器
反向代理服务器是一种代理服务器,用于管理从外部网络到内部网络的连接或任何特定请求。它保护、路由和管理从外部网络到内部网络、Web服务器或专用网络的流量。
外网客户机:我们平时打开浏览器输入网址访问www.nginx.cn的场景中,我们的笔记本就可以理解为一个外网客户机。
nginx反向代理服务:浏览器输入网址并回车后,会发起一个http请求给nginx反向代理服务器,这个请求如果是访问静态文件,那么nginx作为web服务器直接返回请求的内容,如果是访问的后台服务逻辑,那么nginx把请求转发给后端的服务处理。
内网web服务:后端的服务可以是很多种类型,LNMP环境下的php-fpm进程,Java环境下的tomcat、jetty等容器,通过程序逻辑处理http请求,生成html页面或者json串返回给客户端。
我们使用命令行模拟浏览器可以获取到nginx返回的http头信息,Server: nginx表明使用的nginx服务器。
curl -I www.qiquanji.com
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 16 May 2019 07:14:33 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.4.4
nginx如何配置反向代理
nginx反向代理不需要编译额外的模块,默认自带proxy_pass和fastcgi_pass指令,通过在location配置块中增加指令就可以实现反向代理功能。
以www.nginx.cn为例,这个网站用的wordpress程序,wordpress是php语言编写,那么需要通过php运行环境,可以选择apache的php扩展或者php-fpm环境,我选择的是php-fpm,php-fpm设置为Unix socket模式 。
Unix socket后端服务配置
# server context
location ~ \.php$ {
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/tmp/php-cgi.sock;
}
. . .
ip端口后端服务配置
# server context
location ~ \.php$ {
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
. . .
proxy_pass和fastcgi_pass区别
对于上面介绍的两种情况下proxy_pass和fastcgi_pass可以互相替代使用,不过两者还是有区别的,从名字我们就可以看出来,fastcgi_pass是用来反向代理fastcgi协议,proxy_pass可以代理包括fastcgi协议在内的其它协议。
例如镜像一个网站,这种情况下就需要proxy_pass:
location /{
proxy_pass http://www.qiquanji.com;
}
本站声明:网站内容来源于网络,如有侵权,请联系我们https://www.qiquanji.com,我们将及时处理。
微信扫码关注
更新实时通知