Nginx/HttpsOverSSH

来自OSSmedia

本页讲述如何通过SSH代理HTTPS流量,适用于公网入口机代理内网服务器的情况。这种方法的ssl证书配置在内网服务器上,所以迁移入口机无压力。

SSH反代

  • 在后端机上配置一个专门用于代理的用户,并设置ssh密钥
  • 使用screen或者系统服务连接

screen

分为三个文件

  • start.sh
  • 80.sh
  • 443.sh
#!/bin/bash
while true
do
ssh -NR 127.0.0.1:8443:127.0.0.1:443 <remote server>
sleep 3
done
#!/bin/bash
while true
do
ssh -NR 127.0.0.1:8080:127.0.0.1:80 <remote server>
sleep 80
done
#!/bin/bash
screen -S 80 -dm ~/80.sh
screen -S 443 -dm ~/443.sh

Nginx反代(入口机)

修改入口机上的的nginx配置文件,添加stream块

stream {
    upstream ssl_backend {
        server 127.0.0.1:8443;
    }
    upstream http_backend{
        server 127.0.0.1:8080;
    }
    server {
        #ssl_preread on; 
        listen 443;
        proxy_pass ssl_backend;
        proxy_protocol on;
    }
    server {
        listen 80;
        proxy_pass http_backend;
        proxy_protocol on;
    }
}

Nginx后端

  • 请在所有listen后面加上 proxy_protocol
  • nginx 配置文件中需要如下两行:
set_real_ip_from 127.0.0.1;
real_ip_header proxy_protocol;