Я новичок в nginx. Я пытаюсь узнать, используя поиск www и stackoverflow. В основном мне помогают понять, как создать мою конфигурацию nginx.
У меня есть домен www.mysite.com. Все; целевая страница, ошибка и Ошибка сервера должны быть перенаправить по умолчанию index.html. Я также определяю свой журнал доступа и ошибок. Все это делается (код ниже) внутри файла /etc/nginx/conf.d/default.conf.
Мне нужно перенаправить (proxy_pass) /админ, /Пользователь и все, что с ними связано. Например, у /admin также есть другая папка, такая как /admin/login/. Мне нужно, чтобы все после /admin должно быть перенаправлено. То же самое относится и к /user.
1) Глядя на мой код, правильно ли я перенаправляю расположение/админ и местоположение/пользователь?
2) Я также использую try_files $uri $uri/ =404; в перенаправлении. который также перенаправляет 404 на index.html по умолчанию. Я делаю правильно?
3) Я также запрещаю доступ к некоторым файлам и папкам. Я делаю правильно?
Мой главный вопрос: как исправить мою конфигурацию nginx, если она неверна? Итак, чтобы понять правильную конфигурацию nginx, я делю свой вопрос на 3 разных вопроса выше. Надеюсь, я не затормозил stackoverflow, как задавать вопросы.
Спасибо.
Обновлено:
server {
charset UTF-8;
listen 80;
listen [::]:80;
server_name www.mysite.com;
access_log /var/log/nginx/host.access.log main;
error_log /var/log/nginx/host.error.log main;
# define a root location variable and assign a value
set $rootLocation /usr/share/nginx/html;
# define www.mysite.com landing page to the static index.html page
location / {
root rootLocation;
index index.html index.htm;
}
# define error page to the static index.html page
error_page 404 /index.html;
location = /index.html {
root rootLocation;
internal;
}
# redirect server error pages to the static index.html page
error_page 500 502 503 504 /index.html;
location = /index.html {
root rootLocation;
internal;
}
# redirect www.mysite.com/admin to localhost
# /admin or /admin/ or /admin/**** must be redirect to localhost
location /admin {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://127.0.0.1:3000";
}
# redirect www.mysite.com/user to localhost
# /user or /user/ or /user/**** must be redirect to localhost
location /user {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://127.0.0.1:3001";
}
}
Обычно оператор root
помещают один раз в блок server
, а не повторяют одно и то же значение в нескольких блоках location
.
Вы используете proxy_pass
для изменения URI перед передачей его вверх по течению. В этом случае значение location
и часть URI значения proxy_pass
должны либо заканчиваться на /
, либо не заканчиваться на /
. Подробнее см. в этот документ.
Обычно вы нет хотите поместить try_files
и proxy_pass
в одно и то же location
. Это заставляет Nginx проверять наличие файла в корневом каталоге документа, прежде чем разрешить передачу запроса вверх по течению.
Вам не нужно отказывать в доступе к файлам конфигурации, так как эти файлы не должны находиться в корневом каталоге документа.
В моем примере /admin означает все, что связано с /admin, например, /admin или /admin=***** или /admin/login. Итак, моя конфигурация /admin верна или я должен изменить ее на /admin/*
Значение root
наследуется от внешнего блока, если вы не переопределите его внутри блока location
. Вам не нужен оператор try_files
в блоках location /admin/
или location /user/
. Оператор location /admin/
означает любой URI, начинающийся с /admin/
(подробнее см. этот документ).
Спасибо, Ричард, я обновляю свой код. Единственная часть, которая не может его получить, это proxy_pass. (Извините за мой английский). ссылка, которую вы предоставляете, говорит о «.... URI исходного запроса ...». В моем случае, если uri соответствует ( /admin ), мне нужно пропустить этот uri, а не изменить URI, как показано в моем примере. Если мой uri (например, /admin=?123 или /admin/login/1 ), правильно ли nginx перенаправляет мой uri, используя proxy_pass?
Утверждения proxy_pass
в вашем вопросе включают часть URI, которая является /
. Это заставляет Nginx изменить запрошенный URI и удалить admin
или user
из исходного запроса. Если вы хотите передать весь URI вверх по течению без изменений, удалите завершающий /
из оператора proxy_pass
.
Я обновляю свой вопрос с вашей помощью. Большое спасибо, Ричард.
Спасибо, Ричард. Во-первых, как определить root в 1 месте и использовать другие места? Во-вторых, я новее не понимаю proxy_pass. Nginx и localhost/3000 или 3001 находятся на одной машине. Где я определяю try_files?