Я настроил этот сервер nginx для example.com
и www.example.com
быть кешем / обратным прокси, беря данные с mysource.example.com
Кажется, что в браузере все работает нормально, но я заметил значительное падение рейтинга Google, и когда я протестировал URL-адрес с помощью wget, я получил бесконечный цикл.
# test without www , getting infinite loop
wget --header="Host: example.com" http://[SERVER IP]/file.html
Location: https://www.example.com/file.html [following]
--2020-02-07 21:43:14-- https://www.example.com/file.html
Reusing existing connection to www.example.com:443.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://www.example.com/file.html [following]
20 redirections exceeded.
^^^ RIGHT HERE !!!
# but with www it works OK:
wget --header="Host: www.example.com" http://[SERVER IP]/file.html
HTTP request sent, awaiting response... 200 OK
Length: 1307 (1.3K) [text/plain]
Saving to: ‘file.html’
Думаю, мне нужно указать другой host
при перенаправлении с не www на www ?!
Или это просто wget вещь потому что обычно он должен переключаться на www.example.com при первом перенаправлении, но удерживает хост без www от команды nginx?
# redirect http to https
server {
listen 80;
server_name example.com;
server_name www.example.com;
proxy_set_header Host www.example.com
return 301 https://www.example.com$request_uri;
}
# and redirect non www to www
server {
listen 443 ssl http2;
server_name example.com;
proxy_set_header Host www.example.com;
return 301 https://www.example.com$request_uri;
}
# main server, SSL
server {
listen 443 ssl http2;
server_name www.example.com;
location / {
proxy_pass http://mysource.example.com:81;
proxy_set_header Host www.example.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache nginx_ramdisk_cache;
}
} # end of server
Проблема заключается в том, как вы используете wget
. Используя:
wget --header="Host: example.com" http://example.com/file.html
вы заменяете Host
заголовок каждый просить, чтобы wget выполню. Так:
80
вашего сервера и будет перенаправлен на https://www.example.com/file.html
,443
вашего сервера, но отправляет Host: example.com
заголовок вместо Host: www.example.com
. Он перенаправляется на https://www.example.com/file.html
,Итак, ваша конфигурация в порядке, в вашем тесте была просто проблема. Вы никогда не должны отменять Host
заголовок wget автоматически установит его на домен в URL-адресе.