У меня есть обратный прокси (80/443) и серверное приложение (8015/44315). Оба работают на nginx.
Обратный динамический vhost работает нормально, но у меня небольшая проблема с классическим статическим vhost ...
rp vhost conf:
server {
listen 443 ssl;
server_name domain.tld;
ssl_certificate /usr/local/etc/letsencrypt/live/domain.tld/fullchain.pem;
ssl_certificate_key /usr/local/etc/letsencrypt/live/domain.tld/privkey.pem;
return 301 https://www.$host$request_uri$is_args$query_string;
}
server {
listen 443 ssl;
server_name www.domain.tld;
ssl_certificate /usr/local/etc/letsencrypt/live/domain.tld/fullchain.pem;
ssl_certificate_key /usr/local/etc/letsencrypt/live/domain.tld/privkey.pem;
access_log /var/log/nginx/access_domain.tld.log combined;
error_log /var/log/nginx/error_domain.tld.log;
location / {
proxy_pass http://192.168.0.15:8015/;
proxy_redirect default;
proxy_set_header Host $host;
}
}
backend vhost conf:
server {
listen 8015;
server_name www.domain.tld;
root /usr/local/www/domain;
access_log /var/log/nginx/access_domain.tld.log combined;
error_log /var/log/nginx/error_domain.tld.log;
include /usr/local/etc/nginx/snippets/generic.conf;
location / {
alias /usr/local/www/nginx/;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /pub {
alias /usr/local/www/domain/pub;
allow all;
autoindex off;
}
location /static {
alias /usr/local/www/domain/static;
autoindex on;
fancyindex on;
fancyindex_exact_size off;
}
location /vid {
alias /usr/local/www/domain/vid;
autoindex on;
fancyindex on;
fancyindex_exact_size off;
allow all;
}
}
На первый взгляд, все должно быть в порядке. Тем не мение...
$ curl -I https://www.domain.tld/
HTTP/1.1 200 OK
Хорошо!
$ curl -I https://www.domain.tld/pub/
HTTP/1.1 403 Forbidden
ХОРОШО!
$ curl -I https://www.domain.tld/pub/file.txt
HTTP/1.1 200 OK
Потрясающие!
А теперь ... без /
$ curl -I https://www.domain.tld/pub
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Sun, 20 Nov 2016 19:04:03 GMT
Content-Type: text/html
Connection: keep-alive
Location: http://www.domain.tld:8015/pub/
Почему без завершающего / у меня это "перенаправление" на бэкэнд-порт 8015? Как я могу это решить?
После ваших предложений:
backend vhost conf:
[...]
location / {
alias /usr/local/www/nginx/;
try_files $uri try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /pub {
alias /usr/local/www/domain/pub;
allow all;
autoindex off;
}
[...]
rp vhost conf:
[..]
location / {
proxy_pass http://192.168.0.15:8015;
proxy_redirect default;
proxy_set_header Host $host;
}
[..]
Все еще не работает
$ curl -I https://www.domain.tld/pub/
HTTP/1.1 403 Forbidden
$ curl -I https://www.domain.tld/pub
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 21 Nov 2016 08:04:03 GMT
Content-Type: text/html
Connection: keep-alive
Location: http://www.domain.tld:8015/pub/
Просто удалите косую черту в конце директивы proxy_pass.
Этот proxy_pass http://192.168.0.15:8015/
Должен быть proxy_pass http://192.168.0.15:8015
Он делает то, что указано в вашей конфигурации - эта строка
try_files $uri $uri/
Документ / pub не найден, поэтому он ищет каталог / pub /, как вы ему сказали.