Nginx代理服务
标签:Nginx

Nginx代理服务

Nginx作为代理可以实现很多的协议的代理

正向代理:

通过代理去获取我们想要的服务,如翻墙

反向代理:

用户不知道后面的服务器,往往请求的是代理。

区别:

区别在于代理的对象不一样

正向代理的对象是客户端,为客户端服务区访问网站

反向代理的对象是服务端,用户需要知道自己请求的是那台服务器

1. 配置

语法:

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

1.1 反向代理测试

Step 1:设置本地server的配置文件 realserver.conf

server {
    listen       8080;
    server_name  localhost ;

    #charset koi8-r;
    access_log  /var/log/nginx/server.access.log  main;

    location / {
        root   /opt/app/code2;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

Step 2:设置代理server的配置文件:fx_proxy.conf

server {
    listen       80;
    server_name  192.168.91.136;

    #charset koi8-r;
    access_log  /var/log/nginx/test_proxy.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    
    location ~ /test_proxy.html$ {
        proxy_pass http://127.0.0.1:8080;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

Step 3:访问测试

1.2 正向代理测试

Step 1:在需要代理的服务器上设置admin.conf

server {
    listen       80;
    server_name  192.168.91.136;

    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;

    location / {
        if ( $http_x_forwarded_for !~* "^47\.94\.254\.142") {
            return 403;
        }
        root   /opt/app/code;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504 404  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

可见上面的做了if判断,判断只能从指定ip过来的才能访问,否者返回403错误

Step 2:在代理服务器上设置zx_proxy.conf

server {
    listen       80;
    server_name  localhost jeson.t.imooc.io;

    #charset koi8-r;
    access_log  /var/log/nginx/test_proxy.access.log  main;
    resolver 8.8.8.8;
    location / {  
        proxy_pass http://$http_host$request_uri;
    }  

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

代理服务器这边添加了一个dns解析,将收到的http_host和uri进行转发。

Step 3:测试

上面是我本地测试的直接访问返回403错误,我在阿里云上的服务器上设置好了了代理(安装squid)使用squid在阿里云服务器上搭建自己的代理服务器 ,并且能够访问,但我忘了我被代理的服务器是用的虚拟机,没有外网ip,所以不测试了。

2. 其他配置

1. 缓存区

Syntax:proxy_buffering on|off;
Default:proxy_buffering on;
Context:http,server,location

打开缓存区,可以尽可能的收集完请求的头信息,再做转发,减少了IO损耗。

扩展:proxy_buffer_sizeproxy_buffersproxy_busy_buffers_size

2. 跳转重定向

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

可以在代理的时候添加一些头信息。

扩展: proxy_hide_headerproxy_set_body

4. 超时:

Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context:http,server,location

扩展:proxy_read_timeoutproxy_send_timeout


由于这些配置都是通用的,可以单独写到一个文件,然后include进去

新建文件:/etc/nginx/proxy_params

proxy_redirect default;

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffer_size 32k;
proxy_buffering on;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;

例如在 fx_proxy.conf include进去

    location ~ /test_proxy.html$ {
        proxy_pass http://127.0.0.1:8080;
	include /etc/nginx/proxy_params;
    }
  • 4 min read

CONTRIBUTORS


  • 4 min read