
Я хотел достичь следующей цели и заставить это работать во внутренней сети, однако это не работает во внешней сети.
Цель: Развернуть nginx для обратного прокси-сервера n с разными частными IP-адресами, а также открыть только порты 80/443 на маршрутизаторе и перенаправить их на сервер Nginx в бэкэнде.
Ngix версии 1.18.0 на Ubuntu 22.04 LTS (Jammy Jellyfish)
У меня есть доменное имя, которое указывает на публичный IP-адрес моего маршрутизатора, и у меня есть конфигурация обратного прокси-сервера nginx, которая работает хорошо только при подключении к домашнему Wi-Fi (внутренней сети), но внутренние серверы не будут доступны, если я, например, попробую подключиться к 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, и теперь он доступен из интернета.
Два поста помогли мне разобраться в этом:
Спасибо,