我有一个带有网络服务器和 OpenVPN 访问服务器(带有自己的网络界面)的小型网络。我只有 1 个公共 IP,希望能够将子域指向网络服务器上的网站(例如 website1.domain.com、website2.domain.com),并将子域 vpn.domain.com 指向 OpenVPN 访问的 Web 界面服务器。
经过一些谷歌行动后,我认为最好的方法是设置一个代理服务器。 NGINX 似乎可以通过“proxy_pass”函数来做到这一点。我让它适用于 HTTP 后端 URL(网站),但它不适用于 OpenVPN 访问服务器 Web 界面,因为它强制使用 HTTPS。我对 HTTPS 很满意,并且更喜欢将它用于网络服务器上托管的网站。默认情况下是自签名证书。已安装,我也想使用自签名证书。对于其他网站。
我如何“接受”自签名证书。对于后端服务器?我发现我需要生成一个证书。并在 NGINX 反向代理配置中定义它,但我不明白这是如何工作的,例如我的 OpenVPN 服务器已经安装了 SSL 证书。我可以通过以下方式访问 OpenVPN Web 界面https://direct.ip.address.here/admin但当我尝试通过 Chrome 访问网络界面时,出现“此网站无法提供安全连接”页面。
我的 NGINX 反向代理配置:
server {
listen 443;
server_name vpn.domain.com;
ssl_verify_client off;
location / {
# app1 reverse proxy follow
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://10.128.20.5:443;
proxy_ssl_verify off;
}
access_log /var/log/nginx/access_log.log;
error_log /var/log/nginx/access_log.log;
}
server {
listen 80;
server_name website1.domain.com;
location / {
# app1 reverse proxy follow
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://10.128.11.20:80;
}
access_log /var/log/nginx/access_log.log;
error_log /var/log/nginx/access_log.log;
}
附近的一个想法... 也许 NGINX 根本不是合适的工具(现在或长期)?假设我可以修复证书。我目前遇到的问题是,我们需要更多后端 Web 服务器来处理流量,是否也可以扩展 NGINX 代理?比如集群或者负载均衡器之类的?我应该寻找一个完全不同的工具吗?
答案1
您的 443 服务器块未配置用于 SSL 请求。您需要添加ssl
到listen
指令并配置ssl_certificate
和ssl_certificate_key
。
例如
server {
listen 443 ssl;
ssl_certificate /path/to/ssl/certificate.pem;
ssl_certificate_key /path/to/ssl/certificate.key;
# ...
您可以在此处找到有关这些设置和其他 TLS/SSL 相关设置的更多信息:http://nginx.org/en/docs/http/configuring_https_servers.html。
我目前遇到的问题是,我们需要更多后端 Web 服务器来处理流量,是否也可以扩展 NGINX 代理?
NGINX 可以很好地垂直扩展(增加一台服务器上的资源)。如果您想要添加更多 NGINX 服务器(为了水平可扩展性或为了高可用性)并且您只有一个公共 IP 地址,则需要管理虚拟 IP (VIP)。您可以使用该keepalived
服务来管理 VIP。但是,对于小型网络,我认为您不需要这个。