Nginx с несколькими местоположениями, обслуживающими некоторые php файлы для загрузки - PullRequest
2 голосов
/ 06 мая 2020

У меня есть два каталога, / home / php / www/public/ и / home / php / www/private/, и я хотел бы обслуживать, какой из них зависит от первой части uri.

Я бы хотел, чтобы / foo / действовал «нормально» в том смысле, что он должен обслуживать любой файл, находящийся в этом месте, например mysite.com/about будет обслуживать /public/about.php. Однако / private / всегда будет обслуживать один файл независимо от запроса, например mysite.com/private/foo, mysite.com/private/bar и mysite.com/private/foo/test будут обслуживать / private / app. php.

Я, вероятно, нахожусь в сотне различных вариаций того, что я видел здесь и в других гуглах, но, будучи новичком во всем этом, не могу собрать воедино именно то, что мне нужно. После нескольких дней проб и ошибок я близок к тому, что мне нужно, mysite.com/about правильно обслуживает /public/about.php, а mysite.com/private/whatever получает /private/app.php, но он не выполняет его, а вместо этого служит для загрузки.

Вот что у меня есть:

server {                                                                                 

        listen 80;                                                                       
        listen [::]:80;                                                                  

        root /home/php/www/public;                                                       

        index index.php;                                                                 

        server_name mysite.com;                                        

        location /private/ {                                                                
                alias /home/php/www/private;                                                 
                try_files /app.php =404;                                              

                location ~ [^/]\.php(/|$) {                                              
#               location ~ \.php$ {                                                      
#                       fastcgi_split_path_info ^(.+\.php)(/.+)$;                        
                        include snippets/fastcgi-php.conf;                               
                        fastcgi_pass unix:/run/php/php7.2-fpm.sock;                      

#                       fastcgi_index app.php;                                        
#                       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#                       include fastcgi_params;                                          

#                       return 302 https://google.com;                                   
                }                                                                        
        }                                                                                

        location / {                                                                     
                try_files $uri $uri.html $uri/ @extensionless-php;                       
        }                                                                                

        location ~ \.php$ {                                                              
                include snippets/fastcgi-php.conf;                                       
                fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        }

        location @extensionless-php {
                rewrite ^(.*)$ $1.php last;
        }

        location ~ /\.ht {
                deny all;
        }
}

Если я заменю все внутри блока location /private/ просто return 302 https://google.com он успешно перенаправляется на google.com, поэтому я знаю, что этот блок местоположения возвращается, но помещает то же самое внутри location ~ \.php$ внутри location /private/, ничего не происходит, поэтому мне кажется, что он не попадает в этот блок, что я скучаю? В /var/log/nginx/error.log нет связанных с этим ошибок.

1 Ответ

1 голос
/ 06 мая 2020

Попробуйте:

location /private/ {                                                                
    root /home/php/www/private;
    try_files /app.php =404;

    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}

Используйте root вместо alias, так как вы не пытаетесь создать псевдоним исходного запроса. Файл был загружен из-за ненужного вложенного блока location.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...