Prefixo de raiz Nginx com outra subpasta?

2

Passei muitas horas com uma configuração aparentemente simples, mas não sei a configuração correta: (

Eu tenho 2 aplicativos diferentes, o que eu tenho que servir 2 url diferente. Tudo sob este 2 aplicativo precisa pegar todos um index.php.

Exemplos: (URL público = > caminho servido (aplicativo))

https://example.com/ => /var/public/index.php
https://example.com/xy => /var/public/index.php
https://example.com/xy/zw => /var/public/index.php

mas!

https://example.com/api/v2 => /api/public/index.php
https://example.com/api/v2/xy => /api/public/index.php
https://example.com/api/v2/xy/test => /api/public/index.php

Eu também tenho o proxy reverso do Apache configurado: (somente para reescrever / api / v2 para / api / public, portanto, apenas em nginx / api / public uri exibido - proxy reverso necessário, tenho apenas 1 IP público, mas muitos sites)

<VirtualHost *:443>
    ServerName xxx.com
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    SSLEngine On
    SSLCertificateFile  /etc/apache2/cert/xxx.com.pem
    SSLCertificateKeyFile /etc/apache2/cert/xxx.com.key
    SSLCertificateChainFile /etc/apache2/cert/yyyy.pem
    ProxyRequests       Off
    ProxyPreserveHost On
    RewriteEngine On
    RewriteRule ^/api/v2$ /api/v2/ [R,L]
    <Location /api/v2/>
            ProxyPass           http://1.2.3.4/api/public/     KeepAlive=On    TimeOut=3600 retry=0
            ProxyPassReverse    http://1.2.3.4/api/public/
    </Location>

    ProxyPass      /     http://1.2.3.4/    KeepAlive=On    TimeOut=3600 retry=0
    ProxyPassReverse  /  http://1.2.3.4/

    LogLevel debug
    ErrorLog /var/log/apache2/xxx-web-error.log
    CustomLog /var/log/apache2/xxx-web-access.log common
</VirtualHost>

Minha configuração não funciona para a segunda seção, apenas para um caminho exato: link .

Sem a execução do fastcgi php, eu gerenciei esta configuração, mas isso não funciona com o php dinâmico.

Minha configuração do nginx:

server {
    listen       80;
    #server_name  localhost;

    # main root for GUI
    #root        /api/public;
    root        /var/public;
    index  index.php;

    location /api/public {
            alias /api/public;
            try_files $uri $uri/ /api/public/index.php?$args;
            #try_files $uri $uri/ /api/public/index.html;
            location ~ \.php$ {
                    include fastcgi_params;
                    try_files $uri = 404;
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_index index.php;
                    fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
            }
    }

    location / {
            try_files $uri $uri/ /index.php?$args;
            #try_files $uri $uri/ /index.html;
            location ~ \.php$ {
                    include fastcgi_params;
                    try_files $uri = 404;
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_index index.php;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            }
    }

    access_log /var/log/nginx/scripts.log scripts;
    error_log  /var/log/nginx/error.log debug;
}

Algum conselho?

Obrigado !!!

UPDATE Conteúdo dos arquivos index.php:

<html>
<body>
<?php
print "<pre>";
print_r($_SERVER);
print "</pre>";
?>
</body>
</html>
    
por DS_Alex 26.01.2017 / 13:45

1 resposta

0

Resolvido!

eu mudei:

  • location /api/public = > %código%
  • em location ~ ^/api/public de alteração de

    try_files $uri $uri/ /api/public/index.php?$args; 
    

    para

    try_files $uri $uri/ /index.php?$args;
    
  • e o mais importante! Altere location /api/public para isso:

    location / {
            try_files $uri $uri/ /index.php?$args;
            #try_files $uri $uri/ /index.html;
            location ~ \.php$ {
                set $php_root $document_root;
                if ($request_uri ~ ^/api/public) {
                    set $php_root /api/public;
                }
                    include fastcgi_params;
                    try_files $uri = 404;
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_index index.php;
                    fastcgi_param SCRIPT_FILENAME $php_root$fastcgi_script_name;
            }
    }
    

O bloco mais é:

set $php_root $document_root;
if ($request_uri ~ ^/api/public) {
    set $php_root /api/public;
}

E, claro, altere location / para $document_root

    
por 26.01.2017 / 15:54