apache — правильный способ настройки NGINX с перезаписью и допустимыми типами MIME

Я пытаюсь протестировать NGINX и, возможно, переключиться с Apache. То, что я прочитал, nginx намного быстрее, но я хочу быть судьей в этом. У меня проблемы с настройкой конфигурации NGINX в соответствии с моей настройкой Apache — в основном это правила переписывания. Я объясню, как работают мои приложения и что я хочу делать в NGINX.

В настоящее время мое приложение обрабатывает все запросы REQUEST_URI, отправленные на сервер. Даже если URI не существует, мое приложение обрабатывает этот URI. Я могу сделать это из-за правила переписывания для Apache.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?_url=$1 [QSA,NC]
</IfModule>

Как вы можете видеть, если файл или каталог на самом деле не существует, он отправляется в index.php. Я даже не проверяю строку запроса, я просто обрабатываю сам URI через переменную PHP $ _SERVER [‘REQUEST_URI’], которая настроена внутри NGINX как fastcgi_param REQUEST_URI $ request_uri;. Я хочу добиться именно этой цели с NGINX, но мне это удалось только отчасти.

Таким образом, в основном, если domain.com/register.php существует, то он перейдет на этот URL-адрес, если нет, он будет перенаправлен на domain.com/index.php, и приложение будет обрабатывать URI оттуда.

Вот мой конфигурационный файл для моего сервера. Это включено в нижней части файла nginx.conf

server {
listen ####:80;
server_name ####;

charset utf-8;

access_log /var/www/#####/logs/access-nginx.log;
error_log /var/www/#####/logs/error-nginx.log;

root /var/www/######/public/;

location / {
index index.php index.html;
include /etc/nginx/mime.types;
try_files $uri /index.php?_url=$1;

include /etc/nginx/fastcgi.conf;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index  index.php;
fastcgi_pass unix:/var/run/php-fpm.socket;

autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
rewrite_log on;
}
}

Так что этот вид работ. Под этим я подразумеваю директиву try_files $ uri /index.php?_url=$1, которая обрабатывает URI так, как я хочу, но типы MIME, похоже, не работают. Все обрабатывается как текст / HTML. Это означает, что мои файлы .css и .js должны быть превращены в файл .php и прикреплен заголовок для правильной обработки. Файлы изображений и шрифтов, кажется, работают правильно, но Chrome по-прежнему отображает тип mime в формате html. У меня есть файл mime.types, поэтому я не могу понять, почему он это делает. Я попытался использовать директиву rewrite для обработки того, что делает try_files, но это не сработало.

Это перезапись, которую я пробовал внутри локации / блока:

if (!-e $request_filename){
rewrite ^(.*)$ /index.php?_url=$1;
}

Итак, мой вопрос заключается в следующем: как правильно переписать свой URI для несуществующих файлов и каталогов, одновременно предоставляя правильный тип MIME для файлов?

0

Решение

Я закончил тем, что решил свою собственную проблему. Я должен был обрабатывать PHP-файлы самостоятельно, и мне потребовалось какое-то время, чтобы наверняка это выяснить. Вот окончательный файл .conf, который отправляет правильные типы MIME, а также переписывает так, как мне было нужно. Надеюсь, это поможет кому-то еще.

server {
listen #######:80;
server_name ######;

charset utf-8;

access_log /var/www/######/logs/access-nginx.log;
error_log /var/www/#######/logs/error-nginx.log;

root /var/www/#########/public/;

location ~ \.php$ {
include /etc/nginx/mime.types;
try_files $uri /index.php?_url=$1;
include /etc/nginx/fastcgi.conf;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index  index.php;
fastcgi_pass unix:/var/run/php-fpm.socket;

}

location / {
index index.php index.html;
include /etc/nginx/mime.types;
try_files $uri /index.php?_url=$1;

autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
rewrite_log on;
}
}

С использованием местоположение ~ .php $ раздел сделал так, что только php-файлы отправлялись в php-fpm. Я также использую try_files директива для обработки отправки всех URI, которые не существуют, в мой скрипт, что и ожидает мое приложение. Надеюсь, это поможет кому-то еще!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]