Форум программистов, компьютерный форум, киберфорум
Наши страницы
nginx
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
47911
0 / -1 / 0
Регистрация: 18.06.2016
Сообщений: 130
1

Nginx и php и 1(одна ссылка/адресация) в правило/место для php обработки

30.09.2017, 17:18. Просмотров 991. Ответов 10

Вообщем. На сервере для каждого сайта создаётся *.conf. В нём автоматом прописываются настройки. Вида:
Кликните здесь для просмотра всего текста

server {
server_name XXX.com www.XXX.com;
listen 185.135.80.100;

root /XXX/;
index index.php index.html index.htm;
access_log /var/log/nginx/XXX.com_access_log;
error_log /var/log/nginx/XXX.com_error_log;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME /XXX$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT /XXX;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param HTTPS $https;
include /etc/nginx/LLl/ZAnPET.conf;
location ~ (^|/)\. {
return 403;
}

location / {
try_files $uri $uri/ /index.php?$args;
}
#location ~ \.php$ {
# try_files $uri @php_BblnOLHuTb;
# #error_page 300 = @php_BblnOLHuTb;
#}
#location @php_BblnOLHuTb {
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm-XXX.com.sock;
}
}



Закоментированное - эксперименты над конфигом.

Вобщем в файле "include /etc/nginx/LLl/ZAnPET.conf;" который подключается к каждому сайту - правила запрета\разрешения на чтолибо, в ключая скрипты. Т.е. "Неизвестные скрипты" запрещены. Но вот проблема.
При правиле вида:
Кликните здесь для просмотра всего текста

location ~* (admin|wp-login.php) {auth_basic "Запароленная зона";auth_basic_user_file /.htpasswd;try_files $uri @php_BblnOLHuTb;}# Админ Часть

надо указывать обработку php. Проблема в том, что если сделать "try_files $uri @php_BblnOLHuTb;" - файл php скачивается. Т.е. в именованый локатион не получается отправить обработку.
Т.е. если использовать:
Кликните здесь для просмотра всего текста

location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri @php_BblnOLHuTb;
#error_page 300 = @php_BblnOLHuTb;
}
location @php_BblnOLHuTb {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm-XXX.com.sock;
}

То файл скачивается, а не выполняется. А если сделать так:
Кликните здесь для просмотра всего текста

location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm-XXX.com.sock;
}

То всё работает нормально. Я вижу 2 решения:
1) Я чего-то не знаю и это мешает мне сделать нормально
2) как-то записывать в переменную "fastcgi_pass unix:/var/run/php5-fpm-XXX.com.sock;" и после использовать "fastcgi_pass ПЕРЕМЕННАЯ;" и это сувать везде, где нужна обработка PHP.

*XXX - это сайт. Т.е. надо сделать универсальный "include /etc/nginx/LLl/ZAnPET.conf;" чтобы его без проблем подключать ко всем сайтам и так резать много чего(естественно с проверкой что получилось).

Дополнение:
Т.е. "include /etc/nginx/LLl/ZAnPET.conf;" не знает что за "fastcgi_pass unix:/var/run/php5-fpm-XXX.com.sock;" используется у сайта. Т.е. в нём прописать жёстко не получится. Соответственно каждый сокет - не имеет доступа в соседние папки(не его сайта).

Кто может мне помочь? Ибо ни по 1 ни по 2 пункту инфы не нарыл.(в плане исполнения).
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2017, 17:18
Ответы с готовыми решениями:

Nginx php-fpm не отображается текст в php файлах, пусые белые страницы при наборе в браузере
Вот конфиг файла домена: /etc/nginx/sites-available/domain2domain.net

Правило для nginx
Всем доброго времени суток. Так как на сервере установлена связка nginx+apache и картинки отдает...

php на nginx
Здравствуйте, я пытаюсь добиться того чтобы php заработало на nginx nginx я установил, php тоже....

freebsd, nginx, php-fpm
Здравствуйте, никогда не занимался администрированием. Имеется машина в Германии с freebsd,...

Сборка nginx+php+mysql
Я в этом деле бум-бум. В интернете хорошей инструкции не нашёл. Хочу собрать с нуля nginx+php...

10
47911
0 / -1 / 0
Регистрация: 18.06.2016
Сообщений: 130
01.10.2017, 21:36  [ТС] 2
Может к вопросу я не правильно подошёл? Вообще задача понятна? Может я криво(в очередной раз) описал проблему/задачу ?
0
47911
0 / -1 / 0
Регистрация: 18.06.2016
Сообщений: 130
03.10.2017, 17:19  [ТС] 3
Вопрос актуален. Я открыт для любых идей.
0
Jewbacabra
Эксперт PHP
3789 / 3126 / 1370
Регистрация: 24.04.2014
Сообщений: 9,503
03.10.2017, 22:24 4
Проверяет существование файлов в заданном порядке и использует для обработки запроса первый найденный файл, причём обработка делается в контексте этого же location’а ... В случае, если ни один файл не найден, то делается внутреннее перенаправление на uri, заданный последним параметром
https://nginx.ru/ru/docs/http/ngx_http_core_module.html#try_files
Цитата Сообщение от 47911 Посмотреть сообщение
location ~ \.php$ {
try_files $uri @php_BblnOLHuTb;
#error_page 300 = @php_BblnOLHuTb;
}
файл найден, других директив для обработки нет, следовательно файл будет отдан в ответ
0
47911
0 / -1 / 0
Регистрация: 18.06.2016
Сообщений: 130
08.10.2017, 07:33  [ТС] 5
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Проверяет существование файлов в заданном порядке и использует для обработки запроса первый найденный файл, причём обработка делается в контексте этого же location’а ... В случае, если ни один файл не найден, то делается внутреннее перенаправление на uri, заданный последним параметром
https://nginx.ru/ru/docs/http/ngx_http_core_module.html#try_files
Сообщение от 47911
location ~ \.php$ {
try_files $uri @php_BblnOLHuTb;
#error_page 300 = @php_BblnOLHuTb;
}
файл найден, других директив для обработки нет, следовательно файл будет отдан в ответ
А как отправить его, файл после нахождения, в обработку(секцию) "@php_BblnOLHuTb"?? Чтобы он выполнился.
0
Jewbacabra
Эксперт PHP
3789 / 3126 / 1370
Регистрация: 24.04.2014
Сообщений: 9,503
08.10.2017, 19:19 6
Цитата Сообщение от 47911 Посмотреть сообщение
А как отправить его, файл после нахождения, в обработку(секцию) "@php_BblnOLHuTb"??
Зачем вообще нужна @php_BblnOLHuTb. Php можно обрабатывать и в \.php
0
47911
0 / -1 / 0
Регистрация: 18.06.2016
Сообщений: 130
09.10.2017, 12:11  [ТС] 7
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Сообщение от 47911
А как отправить его, файл после нахождения, в обработку(секцию) "@php_BblnOLHuTb"??
Зачем вообще нужна @php_BblnOLHuTb. Php можно обрабатывать и в \.php
Конструкция:
Панель, при добавлении домена, делает записи. Было кое-чего подкручено. В результате в эти записи добавляется "подключаемый файл с интрукциями". Он 1 для всех.
Секция "@php_BblnOLHuTb" нужна для того, чтобы в "подключаемом файле" можно было указать: что выполнять как PHP(список разрешённых скриптов. Остальное - под запретом, типо). Скажем при:
location = xxxx.php{Выполнить как PHP}

Так вот. Для каждого конфига-сайта - свой сокет PHP - для этого надо как-то ссылку на него сделать. Т.е. вместо "Выполнить как PHP" - отсылать на обработку PHP.
0
Jewbacabra
Эксперт PHP
3789 / 3126 / 1370
Регистрация: 24.04.2014
Сообщений: 9,503
09.10.2017, 16:34 8
Лучший ответ Сообщение было отмечено 47911 как решение

Решение

47911, что за панель? Впрочем не важно, данная ситуация только подтверждает что панели не нужны, они лишь проблем добавляют.

Добавлено через 3 часа 43 минуты
Можно такой грязный хак сделать
try_files not_exists @php_
1
47911
0 / -1 / 0
Регистрация: 18.06.2016
Сообщений: 130
21.12.2017, 08:06  [ТС] 9
Прошу прощения за столь долгое молчание. Это действительно работает.

Цитата Сообщение от Jewbacabra Посмотреть сообщение
Можно такой грязный хак сделать
Грязно... А почему грязный то? Но впечатляюще. И как я понимаю: на месте "@php_" может быть не только локация(в конфиге) но и адрес, по которому можно отправить человека?(типо перенаправления)

Как я понимаю: мне придётся использовать "try_files not_exists @php_" взамен "try_files $uri =404;"(Я не совсем понимаю смысл этой строчки. Прошу обьяснить что она делает).
0
47911
0 / -1 / 0
Регистрация: 18.06.2016
Сообщений: 130
27.12.2017, 16:14  [ТС] 10
Ещё вопрос. Он связан с темой по смыслу.
Пример конфига:
Кликните здесь для просмотра всего текста

server {
server_name CAiT.ru www.CAiT.ru;
listen X.X.X.X;

root /home/CAiT.ru;
index index.html index.htm index.php;
access_log /var/log/nginx/CAiT.ru_access_log;
error_log /var/log/nginx/CAiT.ru_error_log;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME /home/CAiT.ru$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT /home/CAiT.ru;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param HTTPS $https;
#Что тут подключается - неважно. Отлаженые правила. И без них всё работает. Скажу что сильно затрудняет жизнь тем, кто пытается как-то куда-то вломится
include /etc/nginx/LLl/ZAnPET.conf;
location ~ (^|/)\. {
return 403;
}
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ \.php$ {
try_files not_exists @php_ZAnyCK;
}
location @php_ZAnyCK {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm-CAiT.ru.sock;
}
#Тут подключается файл - доп правила для конкретного хоста... Отлаживаю некоторую часть:
#location = /nAnKA/0.php?Test {
# alias /FAiLbl/DOn_CKPunTbl/0.php?Test;
# try_files not_exists @php_ZAnyCK;
#}
location ^~ /nAnKA/ {
alias /FAiLbl/DOn_CKPunTbl/;
#root /FAiLbl/DOn_CKPunTbl;
#try_files not_exists @php_ZAnyCK;
}
#
}


Идея: Чтобы при обращении к "http://CAiT.ru/nAnKA/0.php" на сервере обрабатывался "/FAiLbl/DOn_CKPunTbl/0.php"(путь от корня сервера. Сам сайт лежит в одной из папок, которая рядом с "FAiLbl".)
Как это сделать?
При правиле с "alias /FAiLbl/DOn_CKPunTbl/;" - скрипт отдаётся на скачку. При "try_files not_exists @php_ZAnyCK;" после "alias /FAiLbl/DOn_CKPunTbl/;" - 404. Т.е. сам файл nginx находит, а вот php5-fpm нет, причём там есть разрешение(в конфиге php, в "pool.d") на чтение папки "/FAiLbl" для конкретного "unix:/var/run/php5-fpm-CAiT.ru.sock"(Потому, что если я делаю "include_once '/FAiLbl/DOn_CKPunTbl/0.php'" оно работает - т.е. доступ есть.)
0
47911
0 / -1 / 0
Регистрация: 18.06.2016
Сообщений: 130
30.12.2017, 09:57  [ТС] 11
Как ни странно, но ответ нашёл сам.
Если вкратце:
в конфиге, для сайта(nginx) пишем:
set $_PHP_COKET unix:/var/run/php5-fpm-CAiT.ru.sock;
т.е. в переменную $_PHP_COKET - записываем запись "unix:/var/run/php5-fpm-CAiT.ru.sock". И при "fastcgi_pass $_PHP_COKET;" - идёт обработка как PHP(Т.е. можно в подключаемых конфигах использовать сокет PHP сайта, и тем самым создавать общие правила). Кто может сказать: сильно ли понижает быстродействие?(Речь идёт об нескольких сотен сайтов)
0
30.12.2017, 09:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2017, 09:57

nginx + php-cgi с флешки
Добрый день! Настраиваю nginx + php-cgi на винде. Если делать так...

Nginx скачиваются php файлы
Привет, настроил по этой инструкции домен, и при переходе например по ссылке domain2.com/info.php...

Nginx php cgi криво отрабатывает
Всем доброго дня. Может кто сможет подсказать. Ситуация freebsd 10.2 , nginx 1.9.12, php 5.6 Все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru