В Mac OS X Leopard, как я могу настроить веб-сервер (nginx) без блокировки брандмауэром? - PullRequest
2 голосов
/ 03 ноября 2011

Я изо всех сил пытаюсь сделать так, чтобы мой сервер nginx был доступен снаружи с включенным брандмауэром OS X (Mac OS X Snow Leopard). Я застрял, я не знаю, что подправить больше.

Я могу получить доступ к своей странице через 127.0.0.1 с включенным брандмауэром и с другого компьютера с отключенным брандмауэром. Я не могу получить доступ извне при включенном брандмауэре, я попытался поместить исключение в брандмауэр для приложения nginx, и оно там, «разрешающее подключения извне», но оно не работает, я также попытался включить веб-обмен , который на самом деле просто запускает внутренний apache, но это не помогло с сервером nginx.

Кроме того, я могу получить доступ к этому пакетному apache извне, отключив nginx! но я не могу получить доступ к МОЕМУ пользовательскому веб-серверу.

Я видел на некоторых форумах, что брандмауэр OS X работает, разрешая подписанные приложения и добавляя исключения, подписывая приложение ... что-то в этом роде. Проблема в том, что добавление nginx в качестве исключения в брандмауэр не работает.

Любая помощь?

1 Ответ

5 голосов
/ 02 января 2012

У меня была такая же проблема, и я не нашел решения, но мне удалось реализовать обходной путь через 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, и вы сможете получить к нему доступ с других машин.

...