Назад | Перейти на главную страницу

директива alias с вложенным расположением для перехвата файлов php - запросы файлов php дают 404

У меня есть каталог / веб-приложение, которое находится за пределами корневого веб-каталога моего сайта.

Скажите, что сайт находится здесь:

/var/www/site/htdocs/

А внешнее приложение находится здесь:

/var/www/apps/coolapp/

Мой вопрос: как настроить nginx для сопоставления / маршрутизации всех запросов, похожих на www.mysite.com/coolapp/* (звездочка является подстановочным знаком) во внешнее расположение /var/www/apps/coolapp/? Например, www.mysite.com/coolapp/test.php должен сервер /var/www/apps/coolapp/test.php.

Я добавил alias директива в production.conf что главный nginx.conf файл включает. Это отлично работало для всего, кроме файлов .php, потому что есть еще один location вместо этого перехватывает файлы .php. Итак, я вложил location в с alias чтобы поймать файлы .php, но теперь nginx сообщает мне, что не может найти файлы .php «404 File Not Found». Вот что production.conf в настоящее время выглядит как

server {
    listen 80;
    listen 443 ssl;

    ssl_certificate     /blah/blah/blah;
    ssl_certificate_key /blah/blah/blah;
    ssl_protocols       blah blah blah;
    ssl_ciphers         blahblahblah;
    ssl_prefer_server_ciphers blahblah;

    access_log /var/log/nginx/www.mysite.com-access.log;
    error_log  /var/log/nginx/www.mysite.com-error.log error;

    server_name mysite.com www.mysite.com;
    root /var/www/site/htdocs;

    include conf/magento_rewrites.conf;
    include conf/magento_security.conf;
    include /var/www/site/nginx/*.conf;

    #-------CODE IN QUESTION-------
    location  /coolapp/ {
        alias  /var/www/apps/coolapp/;
        location ~ \.php {
            # Copied from "# PHP Handler" below
            fastcgi_param MAGE_RUN_CODE default;
            fastcgi_param MAGE_RUN_TYPE store;
            fastcgi_param HTTPS $fastcgi_https;
            rewrite_log on;

            # By default, only handle fcgi without caching
            include conf/magento_fcgi.conf;
        }
    }

    # PHP handler
    location ~ \.php {
      ## Catch 404s that try_files miss
      if (!-e $request_filename) { rewrite / /index.php last; }

      ## Store code is defined in administration > Configuration > Manage Stores
      fastcgi_param MAGE_RUN_CODE default;
      fastcgi_param MAGE_RUN_TYPE store;
      fastcgi_param HTTPS $fastcgi_https;
      rewrite_log on;

      # By default, only handle fcgi without caching
      include conf/magento_fcgi.conf;
    }

    # 404s are handled by front controller
    location @magefc {
        rewrite ^(.*) /index.php?$query_string last;
    }

    # Last path match hands to magento or sets global cache-control
    location / {
        ## Maintenance page overrides front controller
        index index.html index.php;
        try_files $uri $uri/ @magefc;
        expires 24h;
    }
}

conf / magento_fcgi.conf выглядит так:

fastcgi_pass phpfpm;

## Tell the upstream who is making the request
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;

# Ensure the admin panels have enough time to complete large requests ie: report generation, product import/export
proxy_read_timeout 1600s;

# Ensure PHP knows when we use HTTPS
fastcgi_param  HTTPS           $fastcgi_https;

## Fcgi Settings
include                        fastcgi_params;
fastcgi_connect_timeout        120;
fastcgi_send_timeout           320s;
fastcgi_read_timeout           1600s;
fastcgi_buffer_size            128k;
fastcgi_buffers 512            64k;
fastcgi_busy_buffers_size      128k;
fastcgi_temp_file_write_size   256k;
fastcgi_intercept_errors       off;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param  SCRIPT_NAME     $fastcgi_script_name;
# nginx will buffer objects to disk that are too large for the buffers above
fastcgi_temp_path              /tmpfs/nginx/tmp 1 2;
#fastcgi_keep_conn              on; # NGINX 1.1.14
expires                        off; ## Do not cache dynamic content

Кто-нибудь видит, что я делаю не так?

Ах, я понял это. Мне нужно было изменить эту строку

fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;

к

fastcgi_param  SCRIPT_FILENAME /var/www/apps$fastcgi_script_name;