Nginx através do Apache com o Laravel e problemas rewrite_mod

1

Estou usando o Nginx no Apache.

I Nginx escuta a porta 80 e faz proxy para a porta 8080 , que o Apache atende.

Até agora, funciona como URL direto para arquivos, como domain.com e domain.com/index.php .

Mas se eu for para domain.com/test , ele diz 404 Not Found nginx/1.4.6 (Ubuntu) mesmo que eu tenha configurado um route para /test .

Aqui está minha configuração nginx para o domínio:

server {
        listen 80;
        access_log /var/www/site.com/logs/nginx.access.log;
        error_log /var/www/site.com/logs/nginx.error.log;
        root /var/www/site.com/public_html/public;
        index index.php index.html;
        server_name site.com;
        location \ {
                try_files $uri $uri/ index.php/$uri;
        }
        location ~* ^.*\.php$ {
                if (!-f $request_filename) {
                        return 404;
                }
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
                proxy_pass http://127.0.0.1:8080;
        }
        location ~ /\.(ht|git) {
                deny all;
        }
}

E aqui está a configuração do Apache para o domínio:

<VirtualHost *:8080>
        ServerName site.com
        DocumentRoot /var/www/site.com/public_html/public/
        CustomLog /var/www/site.com/logs/apache.access.log common
        ErrorLog /var/www/site.com/logs/apache.error.log
</VirtualHost>
    
por Mark Topper 24.10.2014 / 19:20

2 respostas

1

Já que você já está usando o nginx, por que não usar o Apache + mod_php para o php-fpm? Isso evita a necessidade de um proxy.

Depois de instalar php5-fpm , adicione este vhost e ative-o com sudo ln -s ../sites-available/example.com.conf /etc/nginx/sites-enabled/

# /etc/nginx/sites-available/example.com.conf
server {
    listen 80;    
    server_name     example.com;
    root            /var/www/example.com/public_html/public;

    access_log      /var/www/example.com/logs/access.log;
    error_log       /var/www/example.com/logs/error.log;

    # Disallow access to hidden files (.htaccess, .git, etc.)
    location ~ /\. {
        deny all;
    }

    # Some locations will never contain PHP files, handle it in the server
    location ~ ^/(robots.txt|favicon.ico)(/|$) {
        try_files $uri =404;
    }

    location = /index.php {
        # Disable direct access to the source code of index.php. If you have a
        # Laravel route for '/index.php', copy the @php_router block below.
        return 404;
    }

    location / {
        # Try to serve the static files, otherwise call into PHP
        try_files $uri @php_router;
    }

    location @php_router {
        include fastcgi_params;
        # If you move index.php outside public/, adjust it here.
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }
}
    
por Lekensteyn 25.10.2014 / 15:07
0

Eu percebi isso. Aqui está algo que as pessoas que tentam fazer o mesmo devem realmente saber. Então aqui estão minhas ações.

Eu chego a uma solução com o seguinte:

server {
        listen 80;
        access_log /var/www/site.com/logs/nginx.access.log;
        error_log /var/www/site.com/logs/nginx.error.log;
        root /var/www/site.com/public_html/public;
        index index.php index.html;
        server_name site.com;

        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
                proxy_pass http://127.0.0.1:8080;
        }
        location ~* ^.*\.php$ {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
                proxy_pass http://127.0.0.1:8080;
        }
        location ~ /\.(ht|git) {
                deny all;
        }
}

A primeira coisa é que adicionei as configurações de proxy para location / { , caso contrário, ele pode não enviar para o Apache.

A próxima coisa que fiz foi remover try_files de todos os locais, pois o Apache usa .htaccess para configurar isso.

E essa foi a minha solução.

    
por Mark Topper 25.10.2014 / 13:28