У нас есть один сайт 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.