/ / Nginx za serwerem proxy: unikaj automatycznego przekierowywania na port wewnętrzny - nginx

Nginx za proxy: unikaj automatycznych przekierowań do wewnętrznego portu - nginx

Mam konfigurację, w której haproxy nasłuchuje na example.com:80 i pośredniczy w żądaniach HTTP do instancji nginx nasłuchującej na serwerze 20080.

Wszystko, co robi nginx, to serwowanie plików statycznych /usr/share/nginx/html.

Na przykład, http://example.com/doc/ mapy do /usr/share/nginx/html/doc/.

Jednak prośba do http://example.com/doc (bez końcowego ukośnika) powoduje przekierowanie 301 na http://example.com:20080/doc/:

$ curl -i http://example.com/doc
HTTP/1.1 301 Moved Permanently
Server: nginx/1.0.15
Date: Tue, 09 Dec 2014 15:10:44 GMT
Content-Type: text/html
Content-Length: 185
Location: http://example.com:20080/doc/

Zauważ, że nginx zawarł port 20080 w adresie URL. Jest to jednak niepożądane, ponieważ publiczny adres URL witryny jest http://example.com/ więc przekierowaniem powinno być http://example.com/doc/ zamiast.

Jaki byłby najłatwiejszy sposób na wyjaśnienie tego nginx?

/etc/nginx/nginx.conf:

user              nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
worker_connections  1024;
}

http {
include       /etc/nginx/mime.types;
default_type  application/octet-stream;
log_format  main  "$remote_addr - $remote_user [$time_local] "$request" "
"$status $body_bytes_sent "$http_referer" "
""$http_user_agent" "$http_x_forwarded_for"";
access_log  /var/log/nginx/access.log  main;
sendfile        on;
keepalive_timeout  65;
include /etc/nginx/conf.d/*.conf;
}

/etc/nginx/conf.d/default.conf:

server {
listen       20080 default_server;
include /etc/nginx/default.d/*.conf;

root /usr/share/nginx/html;
index index.html;

location /doc/ {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd/doc;
}
}

The nginx.conf plik jest domyślny w pakiecie CentOS nginx w wersji 1.0.15. Jest stary, ale nie kontroluję CentOS ani jego wersji pakietu.

Odpowiedzi:

0 dla odpowiedzi № 1

Skonfiguruj swój HAProxy lub użyj port_in_redirect off; dyrektywa.