configuração Nginx passando o parâmetro fastcgi e reescrevendo dependendo da localização

0

Estou pesquisando uma maneira de configurar o nginx com a applicação do php.

Deve servir arquivos estáticos, se existirem. Se eles estiverem na subpasta / dev, eles só serão permitidos para o 127.0.0.1;

Um uri que não é um arquivo estático deve ser redirecionado para php através do terceiro bloco de localização.

Se este uri que vai para o php começar com / dev, eu quero que o uri seja reescrito sem o / dev, e o fastcgi_param APP_ENV configurado como "dev". (E também ser bloqueado para qualquer um, exceto 127.0.0.1)

Se este uri não começar com / dev, eu só quero configurar o fastcgi_param APP_ENV para "prod", sem reescrever.

server {
    root /var/www/homeserver/public;

    location /dev {
        allow 127.0.0.1;
        deny all;

        # This has no effect on the third location block:
        fastcgi_param APP_ENV dev;

        # This is only OK for when try_files pass the uri to /index.php
        rewrite ^/dev(.*)$ /$1 last; 

        try_files $uri /index.php$is_args$args;
    }

    location / {
        # This has no effect on the third location block:
        fastcgi_param APP_ENV prod; 

        try_files $uri /index.php$is_args$args;
    }

    # Front controler :
    location ~ ^/index\.php(/|$) {
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;        

        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;

        internal;
    }

    location ~ \.php$ {
        return 404;
    }
}

Eu tentei resolver isso usando instruções "if". Sem sucesso.

Como posso configurá-lo?

    
por Alsatian 28.07.2018 / 19:28

1 resposta

1

Tente esta configuração (não testei, mas espero que faça o que você quer).

server {
    root /var/www/homeserver/public;

    location /dev {
        allow 127.0.0.1;
        deny all;

        rewrite ^/dev/(.*)$ /$1 break; 

        try_files $uri $uri/ /index.php$is_args$args;

        location ~* [^/]\.php(/|$) {
            gzip off;
            expires off; ## Do not cache dynamic content
            fastcgi_intercept_errors on;

            fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
            fastcgi_split_path_info ^(.+?\.php)(/.*)$;
            if (!-f $document_root$fastcgi_script_name) {
              return 404 "Error 404 Not found. (err#002)";
            }

            include fastcgi_params;
            fastcgi_param APP_ENV dev;
            fastcgi_index index.php;
            fastcgi_param HTTP_PROXY "";  # Mitigate https://httpoxy.org/ vulnerabilities
            fastcgi_param SCRIPT_FILENAME $request_filename;
            # fastcgi_param DOCUMENT_ROOT $realpath_root; # DOCUMENT_ROOT already specified in fastcgi_params
        }
    }

    location / {
        try_files $uri $uri/ /index.php$is_args$args;

        location ~* [^/]\.php(/|$) {
            gzip off;
            expires off; ## Do not cache dynamic content
            fastcgi_intercept_errors on;

            fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
            fastcgi_split_path_info ^(.+?\.php)(/.*)$;
            if (!-f $document_root$fastcgi_script_name) {
              return 404 "Error 404 Not found. (err#001)";
            }

            include fastcgi_params;
            fastcgi_param APP_ENV prod;
            fastcgi_index index.php; 
            fastcgi_param HTTP_PROXY "";  # Mitigate https://httpoxy.org/ vulnerabilities
            fastcgi_param SCRIPT_FILENAME $request_filename;
            # fastcgi_param DOCUMENT_ROOT $realpath_root; # DOCUMENT_ROOT already specified in fastcgi_params
        }
    }
}
    
por 28.07.2018 / 20:08

Tags