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重定向了