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

Другие вопросы по тегам