# вместо настоящих серверов указываем тут промежуточные,
# которые определены в этом же конфиге ниже
upstream valid {
server 127.0.10.1:80;
server 127.0.10.2:80;
}
# промежуточный сервер
server {
listen 127.0.10.1:80;
location / {
proxy_pass http://validator.amd.ru;
# тут nginx автоматически добавляет proxy_set_header Host validator.amd.ru;
# (берёт имя домена из proxy_pass)
}
}
# второй промежуточный сервер
server {
listen 127.0.10.2:80;
location / {
proxy_pass http://validator.bm.ru;
# тут nginx автоматически добавляет proxy_set_header Host validator.bm.ru;
}
}
# тут ничего не меняем
server {
...
location /api/valid {
proxy_pass http://valid/api/validators;
# теперь запросы проксируются в промежуточные сервера, которые проксируют
# в настоящие с правильным именем домена
}
}
listen
, не применяются при «мягком рестарте» (systemctl reload nginx
, nginx -s reload
и т.п.).listen
nginx нужно полностью перезапускать nginx (systemctl restart nginx
и т.п.). server {
...
# наследуется во все location где явно не задано
auth_request .auth;
location ^~ /unique_domain_without_user_agent_condition {
# тут auth_request не вызываем
auth_request off;
return 402;
}
location .auth {
# проверка UA
if ($http_user_agent !~* "test") {
return 403;
}
return 200;
}
}
$ ls -l /etc/nginx/sites-enabled/default
lrwxrwxrwx 1 root root 34 ott 24 10:54 /etc/nginx/sites-enabled/default -> /etc/nginx/sites-available/default
location = /test {
return 302 /test/;
# или 301
}
/path → /path/
работает только если запрос внутри location обрабатывается одной из *_pass директив.
nginx.org/ru/docs/http/ngx_http_core_module.html#l...
[...]
Если location задан префиксной строкой со слэшом в конце и запросы обрабатываются при помощи proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass или grpc_pass, происходит специальная обработка. В ответ на запрос с URI равным этой строке, но без завершающего слэша, будет возвращено постоянное перенаправление с кодом 301 на URI с добавленным в конец слэшом.
[...]
map $check_params $resticted_params {
default 0;
one:two 1;
}
server {
# ...
location /ajax {
set $check_params "$arg_paramone:$arg_paramtwo";
auth_request /check_params;
allow 1.1.1.1;
allow 1.1.1.2;
deny all;
satisfy any;
# proxy_pass или что-то что нужно
}
location = /check_params {
internal;
if ($resticted_params) {
return 403;
}
return 200;
}
}
map $uri $APP_SETTINGS {
default "";
~^/path1/ app-settings-12;
~^/path2/ app-settings-100500;
}
server {
location ~\.php$ {
fastcgi_pass ...;
fastcgi_param APP_SETTINGS $APP_SETTINGS if_not_empty;
...
}
}
server {
listen 127.0.0.1:4000;
root /var/www/html;
location / {
proxy_pass http://127.0.0.1:3000;
error_page 502 = @local;
}
location @local {
}
}
upstream
(видимо Сергей Соколов имел в виду его):upstream backend {
server 127.0.0.1:3000; # основной сервер
server 127.0.0.1:4001 backup; # сервер на случай неработающего основного
}
# запасной сервер, просто отдаёт статику
server {
listen 127.0.0.1:4001;
root /var/www/html;
}
# Это наш сервер
server {
listen 127.0.0.1:4000;
location / {
proxy_pass http://backend;
}
}
fastcgi_param
[...]
Директивы наследуются с предыдущего уровня конфигурации при условии, что на данном уровне не описаны свои директивыfastcgi_param
[...]
fastcgi_param
на уровне location
вы «стираете» все аналогичные директивы которые были заданы на уровне server
и http
. http {
#...
include /etc/nginx/mime.types;
#...
}
=
:server {
listen 8083;
root /www;
location = / {
# отдаём файл index.html
rewrite ^ /index.html break;
}
# всё остальное проксируем
location / {
proxy_pass http://localhost:8082;
...
}
}