一,转发http请求,编辑nginx配置文件nginx.conf,ubuntu一般在/ect/nginx/目录
在nginx.conf的http模块加入:
upstream svr_login {
server xxx.xxx.xxx.xxx:port; #转发目的地址与端口,可以配置多个
}
server {
listen 8800; #本机监听端口
server_name localhost;
location ~*^.+$ {
proxy_pass http://svr_login; #svr_login即上面定义,名字自己定义,对应即可
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
/*
当Nginx设置X-Forwarded-For于$proxy_add_x_forwarded_for后会有两种情况发生:
1、如果从CDN过来的请求没有设置X-Forwarded-For头(通常这种事情不会发生),而到了我们这里Nginx设置将其设置为$proxy_add_x_forwarded_for的话,X-Forwarded-For的信息应该为CDN的IP,因为相对于Nginx负载均衡来说客户端即为CDN,这样的话,后端的web程序时死活也获得不了真实用户的IP的。
2、CDN设置了X-Forwarded-For,我们这里又设置了一次,且值为$proxy_add_x_forwarded_for的话,那么X-Forwarded-For的内容变成 ”客户端IP,Nginx负载均衡服务器IP“如果是这种情况的话,那后端的程序通过X-Forwarded-For获得客户端IP,则取逗号分隔的第一项即可。
*/
二,转发websocket请求,也是在nginx.conf的http模块加入:
upstream ws_game {
server xxx.xxx.xxx.xxx:port; #转发目的地址与端口
}
server {
listen 8301; #本机监听端口
server_name localhost;
location / { #匹配协议用/,有人使用/ws或/websocket,试了不成功
proxy_pass http://ws_game;#转发目标
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
}
}
编辑好后
重加载配置:nginx -s reload
重启:nginx -s reopen
三,这里额外加个配置https说明,也是在nginx.conf的http模块加入:
# HTTPS server
#
server {
# https监听端口,默认433,但如果是自己的个人主机,电信会封此端口,所以可以用其它端口,注意不要用被占用的端口
listen 6001 ssl;
# 请填写绑定证书的域名
server_name tt.gz-cube.com;
#请填写证书文件的相对路径或绝对路径
ssl_certificate /etc/nginx/sslkey/xxx.pem; #这里是ssl key文件存放的绝对路径,根据自己的文件名称和路径来写
ssl_certificate_key /etc/nginx/sslkey/xxx.key; #这里是ssl key文件存放的绝对路径,根据自己的文件名称和路径来写
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
# 如果此服务是作转发用,配置转发地址,下面的网站主面路径就不要
#proxy_pass http://localhost:8080/;
# 网站主页路径
root html;
index index.html index.htm;
}
}
如果要监听/转发多个https端口请求,可以配置多个https server