Настройте nginx для обслуживания параметра строки запроса

Настройте nginx для обслуживания параметра строки запроса

У нас есть один сайт NextJs, с помощью следующего экспорта мы получаем одну папку out, которую мы хотим обслуживать из Nginx. В out/login есть один '[[...parameter]].html'. Когда мы развертываем сайт с помощью pm2, он работает, если мы нажимаем url "serverIP:port/login/programID/applicant"

Но при обслуживании через nginx это не работает.

Ниже приведено содержимое файла конфигурации nginx:

сервер{

    listen 7001;
    server_name server_ip;
    root /var/www/html/out/;
   location / {

            try_files $uri $uri.html  $uri.html/ =404;
   }

}

Помогите, пожалуйста. Я новичок в nginx, поэтому возникли некоторые трудности.

решение1

Строка запроса ссылается на параметры GET, которые вы указываете после URL, например ?name=foo. Я предполагаю, что вы хотите обслуживать файлы в каталоге, поскольку вы упоминаете «папку out, которую мы хотим обслуживать из Nginx».


В этом случае ваш пример должен работать нормально, но вашtry_filesправило ожидает, что вы также предоставите имя файла внутри URL.

Итак, когда вы запрашиваете GETwww.mysite.comзатем Nginx пытается найти путь внутри rootкаталога с именем /, .html, .html/или терпит неудачу с кодом ошибки 404. Путь .html/ссылается на каталог с именем .htmlвнутри вашего корня и, вероятно, является ошибкой.

Если в указанном вами корневом каталоге есть файл, index.htmlто для него будут соответствовать следующие запросы:

  • GET www.mysite.com/index.html(из-за $uri)
  • GET www.mysite.com/index (из-за $uri.html)

Вероятно, вы ищете вот это:

location / {
   root /var/www/html/out;
   index index.html index.htm;
   try_files $uri $uri/ =404;
}

Это делает следующее:

  • Есть ли фактический файл, указанный$uri, в корневом каталоге - затем подавайте это.
  • Есть ли путь к каталогу, указанный$uri, в корневом каталоге?
    • Если да, проверьте, содержит ли он файл с именеминдекс.htmlилииндекс.htm- затем подавайте это.
  • Ничего из вышеперечисленного, возвращается 404.

Поэтому GET www.mysite.comпопробуйте найти файл index.htmlвнутри index.htmвашего корня.


Если вы все еще имеете в виду строки запроса, вы можете написать что-то вроде этого:

location / {
    root /var/www/html/out;
    try_files /$arg_file =404;
}

Затем запрос типа GET www.mysite.com?file=index.htmlбудет искать файл index.htmlвнутри вашего корня. Nginx потрясающий, не так ли?


Надеюсь это поможет :)

Также читайте больше оtry_filesиПодводные камни и распространенные ошибки Nginx.

Связанный контент