Назад | Перейти на главную страницу

Невозможно настроить nginx для обслуживания моего промежуточного веб-сайта

У меня проблемы с настройкой 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

Если совпадение не найдено, будет использоваться первая строфа прослушивания.