我想实现以下目标并使其在内部网络上运行,但这在外部不起作用。
目标:部署nginx反向代理n台具有不同私有ip地址的服务器,并在路由器上只开放80/443端口,转发到后端的Nginx服务器。
Ubuntu 22.04 LTS(Jammy Jellyfish)上的 Ngix 版本 1.18.0
我有一个指向我的路由器的公共 IP 的域名,并且我有一个 nginx 反向代理配置,它只有当我连接到家庭 wifi(内部网络)时才能正常工作,但是如果我在手机上尝试使用 LTE,则后端服务器将无法访问。
这是我的 reverse-proxy.conf:
server {
server_name my.domainname.com;
access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/ssl/certs/localhost.crt;
ssl_certificate_key /etc/ssl/private/localhost.key;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
location /guac/ {
proxy_pass http://privateip1:port/guacamole/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_cookie_path /guacamole/ /guac/;
access_log off;
}
location / {
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_pass http://privateip2:port;
}
location /api {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://privateip:port;
}
}
server {
listen 80;
listen [::]:80;
server_name my.domainname.com;
return 301 https://$server_name$request_uri;
}
有关更多信息,我在手机上看到浏览器试图访问私有 IP 地址 192.xxx,然后我尝试在路由器上创建另一个端口转发规则并将其指向该服务器,但在将私有 IP 替换为带有新开放端口的路由器的公共 IP 后,我的手机仍然出现相同的无法访问错误。我还允许该服务器上的防火墙规则在其端口上接受 tcp/udp,并确保没有任何问题,但仍然没有运气。
所以,我的问题是,是否可以使用 nginx 反向代理实现此目标?
如果您需要更多信息,请告诉我。
谢谢,
答案1
好的,我明白了,是我的路由器出了问题。我打开了 DMZ 并添加 Nginx 服务器作为 DMZ 主机,现在可以从互联网访问它了。
有两篇文章帮助我弄清楚了这一点:
谢谢,