Я запускаю 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;