Друзья, может здесь найдутся люди, которые могут помочь хотябы в части вопросов.
Настраиваю nginx, возникла куча вопросов, ответы на которые что-то не особо удается нагуглить.
1) Директива
include - какие пути она понимает? Абсолютный путь понимает - это понятно, а как быть с относительными?
Если nginx.conf расположен в папке /etc/nginx, то эта папка и будет корневой для всех относительных путей и изменить ее никак нельзя?
2) Обязательные параметры для
server - насколько я понимаю необходимо указать listen и server_name? Но столкнулся с тем что у меня сервер отказался запускаться без access_log и error_log. Не понимаю в чем их необходимость, если сразу после server_name у меня стоял rewrite.
3) Задание правил для
location и вообще логика и последовательность обработки меня немного вводит в ступор. С апачем как-то проще было.
читать дальшеlocation = /img/ - соответствует только адресу «/img/»
location ~ /img/ - соответствует любому адресу, содержащему «/img/»
location ~* /img/ - соответствует любому адресу, содержащему «/img/», либо «/iMg/», либо «/ImG/» и т.п.
location /img/ - соответствует любому адресу, начинающемуся с «/img/»
location ~ ^/img/ - соответствует любому адресу, начинающемуся с «/img/»
location ^~ /img/ - соответствует любому адресу, начинающемуся с «/img/»
В чем отличия последних трех?
В чем особенности использования break?4) Как лучше редиректить с субдоменов?
читать дальше
Такое кстати у меня не сработало из-за отсутствия заданых путей к логам. Что значит «^» после rewrite? Обычно ставили .*, что означало любой набор символов.
Либо так:
location / {
if ($http_host != "example.com") {
rewrite ^/(.*)$ example.com/$1 permanent;
}
}
5) Как перенаправлять все запросы, не начинающиеся со /static/ и не соответствующие реальному файлу (типа robots.txt) на index.php?
читать дальшеДля апача это выглядит примерно как:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^/static/ - [L]
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule .* index.php [L]
</IfModule>
А для nginx:
# сначала
location /static/ {
break;
}
# потом
location / {
error_page 404 =200 /index.php;
}
location = /index.php {
include fastcgi.conf;
}
# либо
location / {
try_files $uri /index.php;
}
location = /index.php {
include fastcgi.conf;
}
# либо
location / {
try_files $uri @php;
}
location @php {
include fastcgi.conf;
}
Что лучше? или быть может как-то иначе?6) Директива
fastcgi_pass - в чем отличие указания стандартного localhost:9000 и unix:/tmp/fastcgi.socket? Насколько оправдано создавать upstream, если в принципе все обрабатывает только один сервер?