nginx反向代理

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

Comments are closed.