如何使用相同的域名在相同的 IP:Port 上运行 nginx 和 ocserv?如果我没记错的话,就像使用 SSTP 协议可以实现类似的事情一样。我正在使用 Ubuntu 20.04。
答案1
您最有可能要做的是配置 Nginx 以侦听 HTTPS 端口,并将其配置为代理到在不同本地端口上运行的 ocserv 进程。Nginx 需要决定为哪个站点提供服务,为了区分,它可以关闭以下任一操作:
- 主机(例如,vpn.yourdomain.com 与 web.yourdomain.com)。
- 前缀路径(例如,web.yourdomain.com/vpn/)。
主机是最好的方法。在该配置中,您将配置两个 DNS 条目以指向同一 IP 地址。Nginx 配置如下所示:
server {
# SSL configuration
#
listen 443 ssl default_server;
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
server_name web.yourdomain.com;
location ~ / {
root /var/www/html/blank/;
try_files $uri $uri/ =404;
allow all;
}
}
server {
# SSL configuration
#
listen 443;
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name vpn.yourdomain.com;
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 120s;
proxy_read_timeout 600s;
proxy_pass http://127.0.0.1:1234/;
}
}
在该配置中,从外部来看,这两项服务都可通过相同的 IP/端口 (HTTPS/443) 访问。它们将使用不同的 DNS 主机名 (web.yourdomain.com 和 vpn.yourdomain.com),均指向相同的 IP。在此示例中,您的 ocserv 进程将监听本地端口 1234