NGINX 404 при запросе местоположения не root - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть этот базовый c conf файл:

server {

    root /usr/share/nginx/html/default/public;

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

    location ~ ^/index\.php(/|$) {
        fastcgi_pass my-php:9000; 
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        internal;

        fastcgi_param SERVER_PORT $server_port;
    }

    location ~ \.php$ {
      return 404;
    }

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

, расположенный в Nginx docker объекте: /etc/nginx/conf.d/default.conf

это хорошо работает, если я запрашиваю веб-сайт

127.0.0.1: 8080

, но не работает с 404, если я хочу получить доступ из браузера к файлу: 127.0.0.1:8080/check.php

, даже если файл существует в publi c dir, и если я переименую его в index.php, он загружается без каких-либо проблем, запрашивая 127.0.0.1:8080, но что нужно изменить в nginx conf, чтобы Файл check.php будет доступен для 127.0.0.1:8080/check.php?

Проблема 2: Я могу запросить 127.0.0.1:8080 с 200 OK и BODY, как и ожидалось, но я получу:

http://127.0.0.1:8080/index.php 404 Not Found
http://127.0.0.1:8080/check.php 404 Not Found

и если я поверну от этого блока:

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

я получаю access.log "GET / HTTP/1.1" 403 и запрос-ответ

http://127.0.0.1:8080/ 403 Forbidden

, но это соответствие работает:

location ~ ^/index\.php(/|$) { ... }

для php, потому что если я сделаю fastcgi_pass недействительным

fastcgi_pass wrong-containername:9000;

, я получу ошибки вместо 200 OK.

1.Как сделать шаблон для местоположения php -fpm, который будет работать с

http(s)://127.0.0.1:8080/
http(s)://127.0.0.1:8080/index.php
http(s)://127.0.0.1:8080/check.php

2. И дополнительным, который обрабатывает все другие запросы с php -fpm к dirs где может быть индекс. php или проверка. php или что-то еще. php

http(s)://127.0.0.1:8080/*

1 Ответ

0 голосов
/ 17 февраля 2020

Ваша конфигурация позволяет выполнять только index.php. Это безопасная конфигурация, поэтому я рекомендую сохранить ее на месте с настройкой для перечисления любых дополнительных сценариев, например, изменить:

location ~ ^/index\.php(/|$) {

на

location ~ ^/(index|check)\.php(/|$) {

Позволит выполнять только /index.php и /check.php.

...