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

4

Instalado nginx e php-fpm via Homebrew.

Eu desabilitei o Apache 2.4 nativo que vem com 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 corro 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)

As 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 o signals.dev no meu navegador - Nenhuma conexão com o servidor da web, embora o signals.dev:8080 esteja me dando Nginx 404 não encontrado.

Por que eu não posso ligar meu nginx para usar 80 portas?

    
por deb0rian 01.02.2015 / 17:12

2 respostas

3

Você tem que usar sudo para ligar qualquer porta abaixo de 1024, portas privilegiadas. Vou tentar resumir tudo. primeiro desabilite o apache interno adicionando disabled 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 pertença à raiz: roda

-rw-r--r-- 1 root wheel 571 Dec 21 19:39 /Library/LaunchDaemons/homebrew.mxcl.nginx.plist

então você pode iniciar o nginx com privilégio para ligar a porta 80 & 443.

PS: você pode usar o lunchy (um aplicativo simples do ruby para gerenciar launchctl.) que é perfeito para esse trabalho. como: sudo lunchy editar apache, sudo lunchy iniciar nginx etc.

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

    
por 01.02.2015 / 18:05
1

Se você precisar executar nginx ou apache na porta 80, defina os privilégios de root para o arquivo .plist.

(estou executando nginx por lunchy)

Por exemplo:

sudo chown root ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
sudo chgrp wheel ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
    
por 02.08.2015 / 19:46

Tags