У меня проблемы с настройкой nginx для обслуживания моего промежуточного веб-сайта. Я изменил server_name, но по некоторым причинам это просто не работает.
Схема URL: «domain.foo» - рабочая, «staging.domain.foo» - промежуточная, «foobar.domain.foo» - веб-служба, «foobar.staging.domain.foo» - промежуточная версия того же веб сервер, ".domain.foo "перенаправлен для обслуживания некоторого статического HTML-кода s3",.staging.domain.foo "перенаправляется для обслуживания некоторого статического HTML-кода s3 в другой корзине. Все рабочие URL-адреса работают и правильно настроены, все промежуточные URL-адреса не работают.
Вот мой файл conf. Вы увидите некоторое дублирование, я с радостью приму любые исправления / оптимизацию, я программист и настройка серверов определенно не мое (но я очень хочу учиться и улучшаться ...).
server {
listen 80; ## listen for ipv4
server_name "domain.foo" "www.domain.foo" default_server;
access_log /var/log/nginx/access.log;
client_max_body_size 5M;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|js|html)$ {
access_log off;
expires max;
root /home/foo/Foo/current/public;
break;
}
if ($host ~ 'www.domain.foo') {
rewrite ^/(.*)$ http://domain/foo/$1 permanent;
}
proxy_pass http://production;
break;
}
}
server {
listen 80;
server_name "staging.domain.foo";
access_log /var/log/nginx/access.staging.log;
error_log /var/log/nginx/error.staging.log;
client_max_body_size 5M;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://staging;
break;
}
}
server {
listen 80; ## listen for ipv4
server_name "foobar.domain.foo";
access_log /var/log/nginx/access.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if ($host = 'foobar.domain.foo') {
proxy_pass http://foobar;
break;
}
}
}
server {
listen 80; ## listen for ipv4
server_name foobar.staging.domain.foo;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://foobar_staging;
break;
}
}
server {
listen 80;
server_name "~^(.+)\.domain\.foo$";
location / {
proxy_intercept_errors on;
error_page 404 = http://domain.foo/404;
set $subdomain $1;
rewrite /$ "/$subdomain/index.html" break;
rewrite ^ /$subdomain$request_uri? break;
proxy_pass http://bucket.domain.foo.s3.amazonaws.com;
}
}
server {
listen 80;
server_name "~^(.+)\.staging\.domain\.foo$";
location / {
proxy_intercept_errors on;
set $subdomain $1;
rewrite /$ "/$subdomain/index.html" break;
rewrite ^ /$subdomain$request_uri? break;
proxy_pass http://bucket.staging.domain.foo.s3.amazonaws.com;
}
}
upstream production {
server 111.255.111.110:8000;
server 111.255.111.110:8001;
server 111.255.111.110:8002;
server 111.255.111.110:8003;
}
upstream staging {
server 222.255.222.222:8000;
server 222.255.222.222:8001;
}
upstream foobar {
server 111.255.222.165:9000;
server 111.255.222.165:9001;
server 111.255.222.165:9002;
}
upstream foobar_staging {
server 222.255.222.222:9000;
}
Что происходит сейчас, когда я указываю в своем браузере на staging.domain.foo, он зависает. Ничего не могу найти в журналах, но, например, создаются access.staging.log и errors.staging.log.
У кого-нибудь есть идея? :)
Здесь часто возникает проблема с DNS. Убедитесь, что и ваш клиент, и сервер могут решить:
staging.domain.foo
Если DNS не настроен для них, обновите файл / etc / hosts на сервере и на рабочем столе.
Nginx использует заголовок Host: для соответствия имени сервера:
Сравнивает заголовок Host входящего HTTP-запроса с блоками server {...} в файлах конфигурации Nginx и выбирает первый из них.
http://wiki.nginx.org/HttpCoreModule#server
Если совпадение не найдено, будет использоваться первая строфа прослушивания.