OSX Yosemite não pode vincular o brew nginx à porta 80

4

Instalado o nginx e o php-fpm via Homebrew.

Desativei o Apache 2.4 nativo que acompanha o OSX executando:

glfx:~ glfx$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

Até diz que não está mais funcionando:

/System/Library/LaunchDaemons/org.apache.httpd.plist: Could not find specified service

Então eu executo meu nginx e verifico o que está vinculado à minha porta 80:

glfx:~ glfx$ lsof -i :80
COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
nginx     266 glfx    9u  IPv4 0x6267c63df8016e53      0t0  TCP *:http (LISTEN)
nginx     267 glfx    9u  IPv4 0x6267c63df8016e53      0t0  TCP *:http (LISTEN)
nginx     268 glfx    9u  IPv4 0x6267c63df8016e53      0t0  TCP *:http (LISTEN)
nginx     269 glfx    9u  IPv4 0x6267c63df8016e53      0t0  TCP *:http (LISTEN)
nginx     270 glfx    9u  IPv4 0x6267c63df8016e53      0t0  TCP *:http (LISTEN)
nginx     271 glfx    9u  IPv4 0x6267c63df8016e53      0t0  TCP *:http (LISTEN)
nginx     272 glfx    9u  IPv4 0x6267c63df8016e53      0t0  TCP *:http (LISTEN)
nginx     273 glfx    9u  IPv4 0x6267c63df8016e53      0t0  TCP *:http (LISTEN)

Minhas configurações do nginx são:

worker_processes  8;
user glfx staff;

events {
   worker_connections  1024;
}

http {
include       mime.types;
default_type  application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] $status '
              '"$request" $body_bytes_sent "$http_referer" '
              '"$http_user_agent" "http_x_forwarded_for"';

access_log  logs/nginx/access.log  main;
error_log   logs/nginx/error.log   debug;

sendfile       on;

tcp_nopush     on;
tcp_nodelay    off;

gzip  on;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_proxied any;

server_names_hash_bucket_size 128;
server_names_hash_max_size 20000;
proxy_headers_hash_bucket_size 128;
proxy_headers_hash_max_size 20000;

underscores_in_headers on;

include /usr/local/etc/nginx/sites/*;
}

E configuração do site:

server {
    listen 80;

    server_name signals.dev;
    root /Users/glfx/Projects/signalsplatform.dev/public_html;

    access_log  /usr/local/var/log/nginx/signals.dev.access.log;
    error_log  /usr/local/var/log/nginx/signals.dev.error.log;

    rewrite ^/app_dev\.php/?(.*)$ /$1 permanent;

    location / {
            index app_dev.php;
            try_files $uri @rewriteapp;
    }

    location @rewriteapp {
            rewrite ^(.*)$ /app_dev.php/$1 last;
    }

    location ~ ^/(app|app_dev|config)\.php(/|$) {
            root /Users/glfx/Projects/signalsplatform.dev/public_html;
            include fastcgi_params;
            fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    }

}

Quando tento acessar os sinais.dev no meu navegador - Nenhuma conexão com o servidor da Web, apesar de os sinais.dev:8080 estarem fornecendo o Nginx 404 não encontrado.

Por que não consigo ligar meu nginx para usar a porta 80?

deb0rian
fonte
Você já descobriu o que estava errado? Estou tendo o mesmo problema. Obrigado.
Nhat Nguyen
Consulte: echo.co/blog/…
Jichao

Respostas:

3

Você precisa usar o sudo para ligar qualquer porta abaixo de 1024, portas privilegiadas. vou tentar resumir tudo. primeiro desabilite o apache interno adicionando desabilitado ao arquivo /System/Library/LaunchDaemons/org.apache.httpd.plist

       <key>Disabled</key>
       <true/>

copie o arquivo plist do nginx para /Library/LaunchDaemons/homebrew.mxcl.nginx.plist

    <key>Label</key>
<string>homebrew.mxcl.nginx</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
<key>ProgramArguments</key>
<array>
    <string>/usr/local/opt/nginx/bin/nginx</string>
    <string>-g</string>
    <string>daemon off;</string>
</array>
<key>WorkingDirectory</key>
<string>/usr/local</string>

com esses parâmetros. verifique a propriedade do arquivo plist. que deve pertencer à raiz: roda

-rw-r - r-- 1 roda raiz 571 21 de dezembro 19:39 /Library/LaunchDaemons/homebrew.mxcl.nginx.plist

então você pode iniciar o nginx com privilégio de vincular as portas 80 e 443.

PS: você pode usar o lunchy (um aplicativo ruby ​​simples para gerenciar o launchctl.), Perfeito para este trabalho. como: sudo lunchy edite o apache, sudo lunchy inicie o nginx etc.

Além disso, você pode ver o que está errado ao jogar o launchctl com o comando syslog -w .

risyasin
fonte
O Apache já tinha essa chave adicionada, também a configuração do Nginx é exatamente como você forneceu e o caminho / privilégios do arquivo plist é o mesmo. Então, algo está errado.
deb0rian
use syslog -w para diagnosticar
risyasin
Isso não mostrou nenhuma anomalia. :)
deb0rian
você tentou iniciar o nginx com o sudo diretamente para testar? talvez algo mais esteja errado. tente "sudo nginx -c /usr/local/etc/nginx/nginx.conf"
risyasin
Sim. Feb 2 15:44:41 glfx.local sudo[1036] <Notice>: glfx : TTY=ttys001 ; PWD=/usr/local/etc/nginx/sites ; USER=root ; COMMAND=/usr/local/bin/nginx -c /usr/local/etc/nginx/nginx.confIsso é resultado do syslog. Nenhum erro relatado em qualquer lugar.
2100 deb debugrian
1

Se você precisar executar nginxou apachena porta 80, defina os privilégios de root para o arquivo .plist.

(Eu estou correndo nginxpelo almoço)

Por exemplo:

sudo chown root ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
sudo chgrp wheel ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
Marina Anayko
fonte
Não me permitirá editar a resposta, a menos que eu mude 6 ou mais caracteres (regra mais estúpida em toda a troca de pilhas ...), mas você deve remover os pontos / períodos completos das extremidades dos comandos.
Matt Fletcher
Também não acredito que isso funcione. Por que o fechamento de permissões faria funcionar, quando o root seria capaz de executar arquivos pertencentes ao seu usuário doméstico?
Matt Fletcher
@MattFletcher Você precisa usar o sudo para ligar qualquer porta abaixo de 1024, portas privilegiadas, como ficou triste acima. Portanto, o .plist precisa estar disponível no root
Marina Anayko