nginx六:反向代理

正向代理:私网到公网

反向代理:公网到私网

一、proxy代理配置

1.nginx反向代理语法:proxy_pass URL

位置:location

示例:

proxy_pass http://localhost:8000/uri/;
proxy_pass http://10.0.0.5:8000/uri/;
proxy_pass http://unix:/tmp/backend.socket:/uri/;

 2.URL跳转修改返回Location,比较少使用

语法:proxy_redirect default;

位置:http,server,location

3.添加发往后端服务器的请求头信息,使用得最多 

语法:proxy_set_header field value;

位置:http,server,location

示例:

#用户请求的时侯HOST的值是www.xxx.com,那么代理服务器会向后端传递请求的还是www.xxx.com 
proxy_set_header Host $http_host;
#$remote_addr的值为客户端的IP,将$remote_addr的值放进变量X-Real-IP中
proxy_set_header X-Real-IP $remote_addr;
#客户端通过代理服务器访问后端服务,后端服务通过该 变量会记录真实客户端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

http header包括:

  • 概述
  • 请求头
  • 响应头

上图中,未设置header。

未设置HOST带来的问题:此时,代理服务器proxy,是通过IP(172.16.1.7)来向web服务器获取页面解析;但后面服务器,是使用同一个IP(172.16.1.7)不同域名来设置了3个web服务器;此时会导致不能跳转到正确的web服务器。

解决办法:在代理服务器proxy中,添加header中的Host:

proxy_set_header Host $http_host;

未设置HOST带来的问题:此时,web服务器的access_log日志,记录的是代理服务器proxy的IP地址:172.16.1.5,不是真实的客户端IP地址。

解决办法:在代理服务器proxy中,添加header中的remote_addr和x-forwarded-for:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

当然,代理服务器proxy的access_log日志,不受影响,记录的仍是客户端的IP地址。

4.代理到后的TCP连接、响应、返回等超时时间

#nginx代理与后端服务器连接超时时间(代理连接超时)
语法:proxy_connect_timeoute time;
默认值:time为60s
位置:http,server,location
#nginx代理等待后端服务器的响应时间
语法:proxy_read_timeout time;
默认值:time为60s
位置:http,server,location
#后端服务器数据回传给nginx代理超时时间
语法:proxy_send_timeout time;
默认值:60s
位置:http,server,location 

5.proxy_buffer代理缓冲区

#nginx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传,不是全部接收完再传递给客户端
语法:proxy_buffering on | off
默认值:on
位置:http,server,location
#设置nginx代理,保存用户头信息的缓冲区大小
语法:proxy_buffer_size size;
默认值:4k | 8k
#proxy_buffers缓冲区
语法:proxy_buffers number size;
默认值:8 4k |8k

 

6.proxy代理,常用的优化配置如下,将配置写入新文件,调用时使用include引用即可

vim /etc/nginx/proxy_params

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;

 

 代理配置location时调用,方便后续多个location重复使用

location / {
  proxy_pass http://127.0.0.1:8080;
  include proxy_params;  
}

 

 

二、示例

1.环境:

角色                             外网IP               内网IP               主机名

proxy                   100.100.100.100     192.168.1.11   proxy_hostname

web:www                                          192.168.1.10  www_hostname

web:blog                                           192.168.1.10   blog_hostname

web:bbs                                            192.168.1.10 bbs_hostname

2.配置虚拟主机

使用“nginx三:”博客中的三台虚拟主机,具体配置如下:

vim /etc/nginx/conf.d/www.conf

server {
    listen 80;
    server_name www.myweb123.com;
        access_log /var/log/nginx/www.myweb123.com_access.log main;
    location / {
        root /var/www/www;
        index index.html;
    }
    location ~ \.avi$ {
        deny all;
    }
}

 

vim /etc/nginx/conf.d/blog.conf

server {
    listen 80;
    server_name blog.myweb123.com;
        access_log /var/log/nginx/blog.myweb123.com_access.log main;
    location / {
        root /var/www/blog;
        index index.html;
    }

    error_page 500 502 503 503 /50x.html;
    location = /50x.html {
        root /var/www/blog;
    }
}

 

vim /etc/nginx/conf.d/bbs.conf

server {
    listen 80;
    server_name bbs.myweb123.com;
    access_log /var/log/nginx/bbs.myweb123.com_access.log main;
    location / {
        root /var/www/bbs;
        index index.html;
    }
}

 

在192.168.1.10服务器上,再增加一台server,使用不同的端口:sell站点

vim /etc/nginx/conf.d/sell.conf

server {
        listen 8080;
        server_name sell.myweb123.com;
        location / {
                root /var/www/sell;
                index index.html;
        }
}

 

 3.配置反向代理服务器

安装nginx:

vim /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

 

在/etc/nginx/conf.d/创建配置文件:

vim sell_proxy.conf

server {
        listen 80;
        server_name bbs.myweb123.com;
        location / {
                proxy_pass http://192.168.1.10:80;
                include proxy_params;
        }
}

 

vim www_proxy.conf

server {
        listen 80;
        server_name sell.myweb123.com;
        location / {
                proxy_pass http://192.168.1.10:8080;
                include proxy_params;
        }
}

 

vim blog_proxy.conf

server {
        listen 80;
        server_name www.myweb123.com;
        location / {
                proxy_pass http://192.168.1.10:80;
                include proxy_params;
        }
}

 

vim bbs_proxy.conf

server {
        listen 80;
        server_name blog.myweb123.com;
        location / {
                proxy_pass http://192.168.1.10:80;
                include proxy_params;
        }
}

  

创建proxy_params文件,用来统一配置代理:

vim /etc/nginx/proxy_params

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;

 

4.重载配置

nginx -t

systemctl reload nginx 

 

posted on 2014-08-29 21:08  myworldworld  阅读(216)  评论(0)    收藏  举报

导航