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

Включение нескольких доменов в серверном блоке 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]

Причина здесь - первое 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)?