Nginx代理服务概述

 代理的类型

正向代理
私网到公网

反向代理
公网到私网

 正向与反向代理的区别

    区别在于代理的对象不一样
    正向代理的对象是客户端
    反向代理的对象是服务端

 

Nginx反向代理配置语法

1.Nginx代理配置语法

    Syntax:    proxy_pass URL;
    Default:    —
    Context:    location, if in location, limit_except

2.url跳转修改返回location[不常用]参考URL

    Syntax:    proxy_redirect default;
    proxy_redirect off;
    proxy_redirect redirect replacement;
    Default:    
    proxy_redirect default;
    Context:    http, server, location    

3.添加发往后端服务器的请求头信息

    Syntax:    proxy_set_header field value;
    Default:    
    proxy_set_header Host $proxy_host;
    proxy_set_header Connection close;
    Context:    http, server, location
# 用户请求的时候HOST的值是www.oldboy.com,那么代理服务会像后端传递请求的还是www.oldboy.com
proxy_set_header Host $http_host;
# 将$remote_addr的值放进变量X-real-IP中,$remote_addr的值为客户端的ip
proxy_set_header X-Real-IP $remote_addr;
# 客户端通过代理服务访问后端服务,后端服务通过该变量会记录真实客户端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

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

//nginx代理与后端服务器连接超时时间(代理连接超时)
Syntax:    proxy_connect_timeout time;
Default:    proxy_connect_timeout 60s;
Context:    http, server, location

//nginx代理等待后端服务器的响应时间
Syntax:    proxy_read_timeout time;
Default:    proxy_read_timeout 60s;
Context:    http, server, location

//后端服务器数据回传给nginx代理超时时间
Syntax:    proxy_send_timeout time;
Default:    proxy_send_timeout 60s;
Context:    http, server, location

5.proxy_buffer代理缓冲区

//nginx会把后端返回的内容先放到缓冲区当中,然后在返回给客户端,边收边传,不是全部接受完再传给客户端
Syntax:    proxy_buffering on | off;
Default:    proxy_buffering on;
Context:    http, server, location

//设置nginx代理保存用户信息的缓存区大小
Syntax:    proxy_buffer_size size;
Default:    proxy_buffer_size 4k|8k;
Context:    http, server, location

//proxy_buffers 缓冲区
Syntax:    proxy_buffers number size;
Default:    proxy_buffers 8 4k|8k;
Context:    http, server, location

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;

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

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

 

Nginx反向代理配置场景

1.环境准备
角色      外网IP(NAT)         内网IP(LAN)         主机名
proxy     eth0:10.0.1.5     eth1:172.16.1.5     lb01
web01     eth0:10.0.1.7     eth1:172.16.1.7     web01

web01的配置

1)安装nginx
2)创建www.xiao.com虚拟主机配置
vim /etc/nginx/conf.d/www.conf
server {
        listen 172.16.1.7:80;
        server_name www.xiao.com;
                
        location / { 
                root /code/www;
                index index.html;
        }
}
3)重启服务
systemctl restart nginx

lb01的配置

1)安装nginx
2)创建代理的配置文件
vim web01_www_proxy.conf 
server {
        listen 80;
        server_name www.xiao.com;

        location / {
                proxy_pass http://172.16.1.7:80;
        }
}
3)启动服务
systemctl start nginx
systemctl enable nginx

改变一:

web01的端口号

1)web01d配置
vim www.conf
server {
        listen 172.16.1.7:8080;
        server_name www.xiao.com;

        location / {
                root /code/www;
                index index.html;
        }
}

systemctl restart nginx

2)1b01代理的配置
vim web01_www_proxy.conf
server {
        listen 80;
        server_name www.xiao.com;

        location / {
                proxy_pass http://172.16.1.7:8080;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

改变二:
web01创建多个虚拟主机

1)web01的配置
增加blog.xiao.com的配置
vim blog.conf 
server {
        listen 172.16.1.7:80;
        server_name blog.xiao.com;

        location / {
                root /code/blog;
                index index.html;
        }
}

2)代理的配置
增加web01_blog_proxy.conf,修改web01_www_proxy.conf
vim web01_blog_proxy.conf
server {
        listen 80;
        server_name blog.xiao.com;

        location / {
                proxy_set_header Host $http_host;
                proxy_pass http://172.16.1.7:80;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

vim web01_www_proxy.conf
server {
        listen 80;
        server_name www.xiao.com;

        location / {
                proxy_set_header Host $http_host;
                proxy_pass http://172.16.1.7:80;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

 

排错思路:

反向代理
如果通过代理访问不到web页面,怎么排错:
1.检查web服务器是否能提供服务
1)检查配置文件
server {
  listen 81;
  server_name www.xiao.com;

  location / {
    root /code/www;
    index index.html;
  }
}
2)根据日志判断错误类型
3)网页目录、索引页是否创建,权限
4)服务是否启动
2.检查代理服务器的配置
1)检查配置文件
server {
  listen 80;
  server_name www.xiao.com;

  location / {
    proxy_pass http://172.16.1.7:81;
    include proxy_params
  }
}
2)DNS解析
要求所有web站点的域名解析为代理服务器的IP

总结:
1)前端 代理
2)后端 Web
前端的80端口对应多个后端的80端口
前端的80端口对应不同的后端端口