#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