25
2020
04

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/post/8737.html

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

微信扫码关注

更新实时通知

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。