Как исправить мою конфигурацию nginx, если она неверна?

Я новичок в 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";
    }
}
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
2
0
1 808
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обычно оператор root помещают один раз в блок server, а не повторяют одно и то же значение в нескольких блоках location.


Вы используете proxy_pass для изменения URI перед передачей его вверх по течению. В этом случае значение location и часть URI значения proxy_pass должны либо заканчиваться на /, либо не заканчиваться на /. Подробнее см. в этот документ.

Обычно вы нет хотите поместить try_files и proxy_pass в одно и то же location. Это заставляет Nginx проверять наличие файла в корневом каталоге документа, прежде чем разрешить передачу запроса вверх по течению.


Вам не нужно отказывать в доступе к файлам конфигурации, так как эти файлы не должны находиться в корневом каталоге документа.

Спасибо, Ричард. Во-первых, как определить root в 1 месте и использовать другие места? Во-вторых, я новее не понимаю proxy_pass. Nginx и localhost/3000 или 3001 находятся на одной машине. Где я определяю try_files?

Nick 15.06.2019 13:01

В моем примере /admin означает все, что связано с /admin, например, /admin или /admin=***** или /admin/login. Итак, моя конфигурация /admin верна или я должен изменить ее на /admin/*

Nick 15.06.2019 13:10

Значение root наследуется от внешнего блока, если вы не переопределите его внутри блока location. Вам не нужен оператор try_files в блоках location /admin/ или location /user/. Оператор location /admin/ означает любой URI, начинающийся с /admin/ (подробнее см. этот документ).

Richard Smith 15.06.2019 13:31

Спасибо, Ричард, я обновляю свой код. Единственная часть, которая не может его получить, это proxy_pass. (Извините за мой английский). ссылка, которую вы предоставляете, говорит о «.... URI исходного запроса ...». В моем случае, если uri соответствует ( /admin ), мне нужно пропустить этот uri, а не изменить URI, как показано в моем примере. Если мой uri (например, /admin=?123 или /admin/login/1 ), правильно ли nginx перенаправляет мой uri, используя proxy_pass?

Nick 15.06.2019 14:08

Утверждения proxy_pass в вашем вопросе включают часть URI, которая является /. Это заставляет Nginx изменить запрошенный URI и удалить admin или user из исходного запроса. Если вы хотите передать весь URI вверх по течению без изменений, удалите завершающий / из оператора proxy_pass.

Richard Smith 15.06.2019 15:52

Я обновляю свой вопрос с вашей помощью. Большое спасибо, Ричард.

Nick 15.06.2019 15:57

Другие вопросы по теме