Включение нескольких доменов в блоке сервера nginx

Я использую nginx для пересылки запросов на моем сервере. У меня есть два серверных блока, один для основного веб-сайта и другой серверный блок для обслуживания моего статического содержимого S3.

   server {
      listen 80;
      server_name abc.guru www.abc.guru;

       access_log  off;
       error_log off;

      location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        Host            $host;
        proxy_redirect          off;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 90;
        proxy_send_timeout 90;
        proxy_read_timeout 90;
        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
      }
 }

 # Server for S3  This accepts anything apart from the above two
server {
    # Listen on port 80 for all IPs associated with your machine
    listen 80 default_server;

    # Catch all other server names
    server_name _;
 }

Это работает для abc.guru но если я войду www.abc.guru не удается, т.е. выдает ошибку. Эта веб-страница имеет цикл перенаправления. Я сослался на документацию и там говорится, что мы можем добавить несколько доменов, используя пробел.

У меня есть запись DNS для www @ и @ относится к корневому IP-адресу.

Как я могу заставить его работать как для первого блока сервера, так и для любого другого домена во втором блоке сервера?

В моем файле.htaccess у меня есть

 RewriteRule (.*) http://www.abc.guru/$1 [R=301,L]
 RewriteRule ^http://www.abc.guru/$1  agent.guru [L]
 RewriteRule ^http://www.abc.guru/$1  index.php [L]

2 ответа

Виновником здесь является первый RewriteRule в вашей конфигурации Apache. Он сообщает Apache перенаправлять каждый запрос http://www.abc-guru.com,

Итак, когда nginx отправляет запрос http://www.abc-guru.com, запрос направляется в Apache, и первый RewriteRule перенаправляет этот запрос в http://www.abc-guru.com, таким образом вызывая цикл перенаправления.

Лучшее решение - это перенести перенаправления на nginx, как предложил xxdesmus.

Другой вариант - ограничить применение первого RewriteRule, только если заголовок HTTP Host abc-guru.com с директивой RewriteCond.

Вместо того, чтобы обрабатывать ваши перенаправления в файле Apache htaccess, почему бы просто не обработать эти перенаправления непосредственно в Nginx? Переслать root -> www с редиректом 301, а затем в блок www server_name отправить это на ваш proxy_pass (Apache)?

Другие вопросы по тегам