nginx代理配置笔记


server{
    resolver 223.5.5.5;
    resolver_timeout 30s;
    listen 80;

    proxy_set_header Host $http_host;
    proxy_buffers 256 4k;
    proxy_max_temp_file_size 0;

    proxy_connect;                          #启用 CONNECT HTTP方法
    proxy_connect_allow   443 80;  #指定代理CONNECT方法可以连接的端口号或范围的列表
    proxy_connect_connect_timeout  20s;     #定义客户端与代理服务器建立连接的超时时间
    proxy_connect_read_timeout  20s;     #定义客户端从代理服务器读取响应的超时时间
    proxy_connect_send_timeout  20s;     #设置客户端将请求传输到代理服务器的超时时间

    location / {
        proxy_pass $scheme://$http_host$request_uri;
        #proxy_connect_timeout 30;
        #proxy_cache_valid 200 302 10m;
        #proxy_cache_valid 301 1h;
        #proxy_cache_valid any 1m;
    }

}

1、不能有hostname。

2、必须有resolver, 即dns,即上面的8.8.8.8,超时时间(30秒)可选。

3、配置正向代理参数,均是由 Nginx 变量组成。

proxy_pass $scheme://$host$request_uri;  
proxy_set_header Host $http_host;  

4、配置缓存大小,关闭磁盘缓存读写减少I/O,以及代理连接超时时间。

proxy_buffers 256 4k;  
proxy_max_temp_file_size 0;  
proxy_connect_timeout 30;  

5、配置代理服务器 Http 状态缓存时间。

proxy_cache_valid 200 302 10m;  
proxy_cache_valid 301 1h;  
proxy_cache_valid any 1m; 

配置好后,重启nginx,以浏览器为例,要使用这个代理服务器,则只需将浏览器代理设置为http:// +服务器ip地址+:+82(82是刚刚设置的端口号)即可使用了。

本机正向代理

这里通俗易懂多嘴说一下:什么是代理?什么是正向代理?什么是反向代理?
代理:我们想干一件事情,但是不想自己干,找中间商。
正向代理:代理的是客户端,代理人是中介传话筒,你直接与目标结算,如买房子和VPN,
反向代理:代理的是服务器,代理人涂掉房东信息,不让你知道你跟谁买房,反正房子过到你名下即可,如负载均衡隐藏真实服务器

负载均衡示例:

upstream com_yongit_blog{
    sticky name=blog expires=1h domain=yongit.com path=/ hash=md5;
    server 192.168.0.8:8090;
    #server localhost:80;
}
server{
    listen 80;
    server_name blog.yongit.com;
    location / {
        proxy_pass http://com_yongit_blog;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $Host;
        proxy_redirect off;
    }
    error_page 500 502 503 504 /50x.html;
    location = 50x.html{
        root html;
    }
}

反向代理示例:

server {
    listen       80;
    server_name  blog.yongit.com;
    set $package 'com.yongit.blog';

    index index.html index.htm index.php;
    root  /datas/website/$package/public;

    location /index/{
         proxy_pass  http://blog.yongit.com/index/;
    }
    location /mobile/{
         proxy_pass  http://blog.yongit.com/mobile/;
    }
    location /admin/{
          proxy_pass  http://blog.yongit.com/admin/;
    }

    location /api/{
          proxy_pass  http://blog.yongit.com/admin/;
    }

    location ~ .*.(svn|git|cvs){deny all;}
    access_log  /datas/logs/nginx/$package.log;
}

其他

通过cloudflare的代理可用:

server {
    listen       80;
    server_name  work.yongit.com;

    index index.html index.htm index.php;
    location / {
        if ($request_method = 'OPTIONS') {
              return 204;
        }
        proxy_pass  http://work2.yongit.com/;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect off;

        # this 5 line usefull
        #proxy_set_header        X-refer-Id 1094;
        #proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        #proxy_set_header        Host $host;
        #proxy_set_header        X-Real-IP $remote_addr;
        #proxy_set_header        REMOTE-HOST $remote_addr;
    }
    location ~ .*.(svn|git|cvs){deny all;}
}

一个同时支持80端口和443端口的IP请求配置:

server {
    listen 80;
    server_name ip.yongit.com;

    # root path to proxypass
    location = / {
        proxy_pass https://ip.yongit.com;
    }

    # not root path to a website
    location / {
        return 303 https://ip.yongit.com;
    }
}

这样子就兼容,直接在命令行输入:curl ip.yongit.com,也可以返回准确的而非https重定向了


原文链接:https://blog.yongit.com/note/131868.html