Назад | Перейти на главную страницу

Настройте nginx для перенаправления внешнего порта на тот же внутренний порт

Я запускаю TileMill, который прослушивает порты 20008 и 20009 с localhost. Я хочу, чтобы к 20009 можно было получить доступ только через nginx на порту 80 (с простой аутентификацией). Я хочу, чтобы 20008 был доступен «напрямую» извне.

server {
   listen 80;
   server_name localhost;
   location / {
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:20009;
        auth_basic "Restricted";
        auth_basic_user_file htpasswd;
    }
}
server {
   listen 20008;
   server_name localhost;
   location / {
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:20008;
    }
}

Очевидная проблема в том, что nginx не может прослушивать порт 20008 - он уже используется TileMill.

Restarting nginx: nginx: [emerg] bind() to 0.0.0.0:20008 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:20008 failed (98: Address already in use)

Есть ли способ, при котором nginx может прослушивать извне, не конфликтуя с другой службой, прослушивающей внутренне? (Изменение localhost к внешнему IP-адресу сервера не работает.)

Измените оператор прослушивания, включив в него внешний IP-адрес, например:

слушайте 1.2.3.4:20008;