Nginx作为反向代理服务器

前言:Nginx通过proxy模块实现反向代理功能。在作为web反向代理服务器时,nginx负责接收客户请求,并能够根据URI、客户端参数或其它的处理逻辑将用户请求调度至上游服务器上(upstream server)。nginx在实现反向代理功能时的最重要指令为proxy_pass,它能够将location定义的某URI代理至指定的上游服务器(组)上。如下面的示例中,location的/uri将被替换为上游服务器上的/newuri。

实验环境:

192.168.2.168 nginx

192.168.2.169 httpd

192.168.2.169 配置bbs,尝试访问正常:

 

192.168.2.168 nginx配置反向代理:

location /forum/ {

          proxy_pass http://192.168.2.169/bbs/;

}

使用正则表达式匹配:

        location ~* ^/bbs/ {

          proxy_pass http://192.168.2.169;
        }

proxy_pass不能出现URI,否则语法错误:nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression

但是192.168.2.169 httpd端的访问日志是192.168.2.168,这并不是我们想要的

nginx反向代理中配置:

 location ~* ^/bbs/ {
          proxy_pass http://192.168.2.169;
          proxy_set_header X-Real-IP $remote_addr;
 }

httpd端修改日志格式:

vim /etc/httpd/conf/httpd.conf

这样我们再来访问:日志访问记录就是实际的客户端地址了

proxy模块的可用配置指令非常多,它们分别用于定义proxy模块工作时的诸多属性,如连接超时时长、代理时使用http协议版本等。下面对常用的指令做一个简单说明。

proxy_connect_timeout:nginx将一个请求发送至upstream server之前等待的最大时长;
proxy_cookie_domain:将upstream server通过Set-Cookie首部设定的domain属性修改为指定的值,其值可以为一个字符串、正则表达式的模式或一个引用的变量;
proxy_cookie_path: 将upstream server通过Set-Cookie首部设定的path属性修改为指定的值,其值可以为一个字符串、正则表达式的模式或一个引用的变量;
proxy_hide_header:设定发送给客户端的报文中需要隐藏的首部;
proxy_pass:指定将请求代理至upstream server的URL路径;
proxy_set_header:将发送至upsream server的报文的某首部进行重写;
proxy_redirect:重写location并刷新从upstream server收到的报文的首部;
proxy_send_timeout:在连接断开之前两次发送至upstream server的写操作的最大间隔时长;
proxy_read_timeout:在连接断开之前两次从接收upstream server接收读操作的最大间隔时长;

如下面的一个示例:
    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;
    client_max_body_size 10m;
    client_body_buffer_size 128k;
    proxy_connect_timeout 30;
    proxy_send_timeout 15;
    proxy_read_timeout 15;

总结:Nginx实现反向代理,使用Module ngx_http_proxy_module模块,proxy_pass指令,设置请求头为真正的客户端地址proxy_set_header X-Real-IP $remote_addr;

原文地址:https://www.cnblogs.com/jjzd/p/6691500.html