Я ищу способ настроить nginx с помощью приложения php.

Он должен обслуживать статические файлы, если они существуют. Если они находятся в подпапке /dev, они разрешены только для 127.0.0.1;

URI, который не является статическим файлом, должен быть перенаправлен на php через третий блок локации.

Если этот uri, который идет в php, начинается с /dev, я хочу, чтобы uri был переписан без /dev, и fastcgi_param APP_ENV установлен в "dev". (А также быть заблокированным для любого, кроме 127.0.0.1)

Если это URI не начинается с /dev, я просто хочу установить fastcgi_param APP_ENV в "prod", без переписывания.

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;
    }
}

Я попытался решить это с помощью "если" заявления. Безуспешно.

Как я могу настроить это?

1 ответ1

1

Попробуйте эту конфигурацию (я не проверял ее, но я надеюсь, что она должна делать то, что вы хотите).

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
        }
    }
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .