Nginx 2 расположения для обслуживания файлов по-разному конфигурация

#nginx #nginx-location

#nginx #nginx-расположение

Вопрос:

Я надеюсь, что это поможет вам. Мой технический стек — это Nginx, React, PHP и MySQL. Я хочу, чтобы все запросы в браузере указывали на index.html таким образом, react-router не выдает мне пустую страницу, поэтому мне не нужно использовать хеширование в URL-адресах (например, /#/test , /#/greeting ). В дополнение к этому я также хочу иметь возможность вызывать простые php-файлы, расположенные в / controllers, с помощью вызовов ajax. Возможно ли это с учетом моей настройки?

example.com.conf

 Location / {
    try_files $uri $uri/ /index.html
    root /var/www/html/example/dist;
    index index.php index.html index.htm index.nginx-debian.html
}

Location /controllers {
    root /example;
    try_files $uri =404;
}
  

Структура папок

 -var
----html
-------example
----------dist
----------controllers
  

Ответ №1:

Сначала я не уверен в вашей структуре папок, потому что у вас есть в вашей конфигурации /var/www/html... и в блоке структуры папок /var/html... , поэтому я предположил, что у вас есть /var/www/html... .

Приведенный ниже конфигурационный файл nginx должен работать, но я его не тестировал. Возможно, вам нужно немного изменить некоторые значения (например, корень блока расположения php).

 server {
    listen 80;
    server_name example.com;
    server_tokens off;

    root /var/www/html/example/dist;

    index index.html index.php;

    location / {
        try_files $uri $uri/ /index.html?$query_string;
    }

    location /controllers {
        root /var/www/html/example;
    }

    location ~* .(php|phtml)$ {
        root /var/www/html/example;
        fastcgi_index           index.php;
        fastcgi_pass            unix:/run/php/php7.4-fpm.sock;
        include                 /etc/nginx/fastcgi_params;
        fastcgi_param           SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param           SCRIPT_NAME $fastcgi_script_name;
        fastcgi_read_timeout    30000;
    }
}
  

Дополнительные:

Это должна быть одна основная корневая папка, а затем для конкретных случаев использования корневые определения в блоке расположения: Nginx Wiki