===== Nginx 作为代理服务器 =====
===== Nginx + 反向代理 + SSL =====
server {
listen 80;
listen [::]:80;
server_name www.xxx.com;
return 301 https://$server_name:443$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name c.ezua.com;
charset utf-8;
# ssl配置
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_ecdh_curve secp384r1;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
ssl_certificate /etc/letsencrypt/live/www.xxx.com/fullchain.pem; #需要修改此处参数
ssl_certificate_key /etc/letsencrypt/live/www.xxx.com/privkey.pem; #需要修改此处参数
root /usr/share/nginx/html;
location / {
proxy_ssl_server_name on;
proxy_pass https://bing.imeizi.me;
proxy_set_header Accept-Encoding '';
sub_filter "bing.imeizi.me" "www.xyz.com";
sub_filter_once off;
}
location /long-long-path {
proxy_redirect off;
proxy_pass http://127.0.0.1:20860;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
# 向后端传送真实IP地址
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
其中:
- 第一个 location 是通用路径反代,获取之后数据之后对部分内容进行替换。''sub_filter''指令将获取到的部分内容进行替换
- 使用了高级功能的一些网站可能需要进行传递 Upgrade,以及 Connection 头部,如:WebSocket
- X-Real-IP 多用于代理服务器,向真实服务器传递远程客户端IP地址
- Server Listen 80 端口,并使用301重定向
- X-Forwarded-For XFF头不是标准HTTP头部
- 第二个 location 可以设置的长一点,这样可以把该路径隐藏在转发的网站中
===== Nginx + 正向代理 =====
将 Nginx 作为一个HTTP代理服务器使用
==== 最小化配置 ====
# Proxy-serv.conf
server {
listen 18081;
server_name _;
# other settings for example ssl
# 代理CONNECT连接请求,代理443及503端口
proxy_connect;
proxy_connect_allow 443 563;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
location / {
resolver 8.8.8.8; #DNS Server used
proxy_pass $scheme://$host$request_uri;
proxy_set_header HOST $host;
#proxy_cache STATIC;
#proxy_cache_valid 200 1d; 针对响应码为200的应答进行缓存,缓存时间一天
#proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
#proxy_buffers 256 4k;
#proxy_max_temp_file_size 0k;
#proxy_connect_timeout 30;
#proxy_send_timeout 60;
#proxy_read_timeout 60;
#proxy_next_upstream error timeout invalid_header http_502;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html;
}
}
注意:被注释掉的部分都是可以不需要的,是配置代理服务器的一般参数
==== 测试正向代理 ====
设置代理,如须在系统中一直启用,须在启动文件,诸如:''~/.bashrc''等文件中添加以下指令
export http_proxy=$IP:$PORT
export https_proxy=$IP:$PORT
使用代理下载数据或者获取参数
$ curl --proxy=$IP:$PORT request_url
$ curl -x https://ip:port request_url
注:如果命令中包含引号,&等符号,须用双引号(单引号)将整个参数包裹,或者进行转义,否则命令会被截断。至于包裹符号用单引号还是双引号,取决于命令中包含的符号,如果命令中包含单引号,则用双引号包裹,反之则用单引号包裹。