LINUX.ORG.RU

конфигурация nginx w/reverse proxy


0

0

Оцените кошерность решения. Можно ли улучшить/сократить/оптимизировать?

server {
	server_name some.website;
	root /var/www;
	# отдаём любую статику в заданном пути либо запрашиваем upstream
	location / {
		try_files $uri @apache;
	}
	# запрещаем тырить .htaccess, .svn и прочее
	location ~ /\. {
		deny all;
	}
	# PHP скрипты запрашиваем у upstream
	location ~* \.php$ {
		try_files $uri @apache;
	}
	# собственно запрос к Apache
	location @apache {
		proxy_pass http://127.0.0.1:81;
		proxy_set_header Host $host;
	}
}

Зачем try в условии для php? Для статики я бы жестко задавал пути или хотя бы расширения.

Vit ★★★★★
()
Ответ на: комментарий от Vit

try стоит убрать.А переменные и так закешируються.

pinachet ★★★★★
()
Ответ на: комментарий от Vit

А как можно привязать location с некоторым выражением к существующему named location?

задавал пути или хотя бы расширения

Так путь задан же общий. Хотя в реальном применении у меня пока root стоит только внутри первого location, остальным он, вроде бы, ни к чему. Строить монструозные регэкспы с кучей расширений я передумал по той причине, что «статикой» ведь являётся всё, что не является скриптами. Зачем заморачиваться?

frozen_twilight ★★
() автор топика

Скажу ещё на тему того, почему я решил не привязывать php сразу к upstream. Во-первых, какие-то поступающие запросы могут быть «виртуальными путями» (т.е. не иметь соответствующих файлов в ФС, а обрабатываться скриптовым движком). Во-вторых, на случай если некоторого файла не существует, то запрос хорошо бы перенаправлять в Apache, чтобы там вебмастер сайта (не давать же всем доступ к конфигу nginx) уже при помощи движка или через какие-то дополнительные rewrite правила мог выдавать необходимый ответ.

frozen_twilight ★★
() автор топика
Ответ на: комментарий от frozen_twilight

> Зачем заморачиваться?

Я плохо понимаю людей, которые на боевые сервера ставят политики «разрешено все, что не запрещено». Поэтому на ваш вопрос ответить затрудняюсь.

Vit ★★★★★
()
Ответ на: комментарий от frozen_twilight

> Во-вторых, на случай если некоторого файла не существует, то запрос хорошо бы перенаправлять в Apache, чтобы там вебмастер сайта (не давать же всем доступ к конфигу nginx) уже при помощи движка или через какие-то дополнительные rewrite правила мог выдавать необходимый ответ.

На убервафлю смахивает. Вам действительно нужны такие навороты на практике? Гораздо раньше вам завалят апач 404 запросами.

В реальной жизни обычно хватает положить статические картинки в один подкаталог, а остальное в другой (или забить нехитрой регуляркой) и пробросить в апач. Дешево, сердито, надежно.

Vit ★★★★★
()

Можно еще апач нафиг выкинуть :)

boombick ★★★★★
()

Как было сказано выше, try_files $uri из секции пхп надо бы убрать. Это дыра в безопасности - любой пхп-файл, случайно попавший на фронтенд, отдастся в плейнтексте. Да и апач действительно можно убрать, заменив его сразу на передачу запроса fastcgi-бэкенду

heisenberg ★★
()
Ответ на: комментарий от Vit

И что же по-вашему надо запретить такого? :)
PHP скрипты подаются на upstream, всё остальное, что лежит в root/DocumentRoot законно считается общедоступной статикой.

frozen_twilight ★★
() автор топика
Ответ на: комментарий от Vit

В реальной жизни обычно хватает положить статические картинки в один подкаталог, а остальное в другой (или забить нехитрой регуляркой) и пробросить в апач. Дешево, сердито, надежно.

А какие такие «остальные», интересно? Есть статика в виде каких угодно файлов, есть динамика (исключительно PHP), и по сути не так важно, лежит оно в какой-то одной особой директории или сразу в нескольких.
Я не то, чтобы против описываемого вами подхода, просто стараюсь иметь дело с реально сложившейся ситуацией, а не сферическим приложением на идеальном хостинге. Не сомневаюсь, что такие бывают, но мне пока особенно не попадались.

frozen_twilight ★★
() автор топика
Ответ на: комментарий от heisenberg

Это дыра в безопасности - любой пхп-файл, случайно попавший на фронтенд

Тем не менее, в реальности оно работает. Nginx не исходный код отдаёт, а гонит запрос на заданный named location. Другого способа сделать это я пока не нашёл.
Apache пока убрать не получится в силу ряда причин.

frozen_twilight ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.