В Mac OS X Leopard, как я могу настроить веб-сервер (nginx) без блокировки брандмауэром?
Я пытаюсь сделать так, чтобы мой сервер nginx был доступен снаружи с включенным брандмауэром OS X (Mac OS X Snow Leopard). Я застрял, я не знаю, что подправить больше.
Я могу получить доступ к своей странице через 127.0.0.1 с включенным межсетевым экраном и с другого компьютера с выключенным межсетевым экраном. Я не могу получить доступ извне при включенном брандмауэре, я пытался поместить исключение в брандмауэр для приложения nginx, и оно там, "разрешающее подключения извне", но оно не работает, я также пытался включить веб-обмен, который на самом деле просто запускает внутренний apache, но это не помогло с сервером nginx.
Кроме того, я могу получить доступ к этому пакетному apache извне, отключив nginx! но я не могу получить доступ к своему пользовательскому веб-серверу.
Я видел на некоторых форумах, что брандмауэр OS X работает, разрешая подписанные приложения и добавляя исключения, подписывая приложение... что-то вроде этого. Проблема в том, что добавление nginx в качестве исключения в брандмауэр не работает.
Любая помощь?
1 ответ
У меня была та же проблема, и я не нашел решения, но я смог реализовать обходной путь через ipfw:
Сначала у вас есть nginx для прослушивания другого порта. Я добавил 10080 и 10443 в качестве дополнительных портов:
server {
listen 80 default_server;
listen 10080 default_server;
listen 443 default_server ssl;
listen 10443 default_server ssl;
...
}
Я оставил порты по умолчанию (80 и 443) для доступа с локальной машины (localhost).
После этого я добавил 2 правила пересылки через ipfw:
fwd 127.0.0.1,10080 tcp from any to me dst-port 80
fwd 127.0.0.1,10443 tcp from any to me dst-port 443
Самый простой способ сделать это через WaterRoof. Кроме того, вы должны включить ip-forwarding в ядре:
sudo sysctl -w net.inet.ip.forwarding=1
Чтобы сделать это постоянным, вы можете добавить следующее в /etc/sysctl.conf:
net.inet.ip.forwarding=1
Теперь весь трафик извне перенаправляется на новые порты, которые слушает nginx, и вы сможете получить к нему доступ с других машин.