nginx反向代理
背景:物理服务器安装虚拟机软件,管理地址为172.16.88.15,管理网卡:ETH0;在虚拟机内部安装了麒麟系统运行业务软件,配置网络地址为10.223.23.2,同样使用物理网卡ETH0。远端管理者平时通过ssh可以访问到10.223.23.2这个地址,但是无法直接路由到172.16.88.15这个地址。172.16.88.15管理平台使用web页面管理内容。这里有三个方法可以访问172.16.88.15这个web页面:
- 1、nginx反向代理:10.223.23.2作为代理服务器直接代理后端web服务器
- 2、socks5代理:client配置10.223.23.2作为代理服务器,会将所有web流量都引向socks5代理。
- 3、iptables路由转发:client短要配置指向172.16.88.15的路由,由于中间会经过多个网络节点最后可能数据包无法到达10.223.23.2
由于可能涉及到硬编码的问题,所以https的流量最后使用https代理,172.16.88.15这个管理平台还涉及到wss 8000端口的vnc服务,一共做了三个模块http、https和upstream,upstream代理wss 8000端口
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 512;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
server {
listen 443 ssl default_server;
server_name _;
ssl_certificate /home/cert/server.crt;
ssl_certificate_key /home/cert/server.key;
location / {
proxy_pass https://172.16.88.15:443/;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_ssl_server_name on;
proxy_ssl_name $proxy_host;
}
}
server {
listen 80 default_server;
server_name _;
location / {
proxy_pass http://172.16.88.15:80;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
stream {
upstream vnc {
server 172.16.88.15:8000;
}
server {
listen 8000 ssl;
ssl_certificate /home/cert/server.crt;
ssl_certificate_key /home/cert/server.key;
proxy_pass vnc;
}
}
1、nginx使用的系统变量可以在:Module ngx_http_core_module 找到,如:$remote_addr(客户端IP),$host(客户端请求中的服务器名)
2、代理相关内容可以在: Module ngx_http_proxy_module 找到,如:proxy_set_header,proxy_pass;还介绍了两个嵌入变量:$proxy_host(在proxy_pass中指定的地址和端口),$proxy_port,$proxy_add_x_forwarded_for。
自解析证书
这部分实验环境需要使用openssl自己生成
docker
下载一个nginx的镜像,然后加载配置文件:
docker run -d -p 80:80 -p 443:443 -p 8000:8000 -v /home/cert:/home/cert -v /root/nginx.conf:/etc/nginx/nginx.conf nginx:lastest