2015-11-25 2 views
0

У меня проблема 301 перенаправления для нескольких сайтов, указывающих на наш основной сайт, хотя предполагаемые затронутые сайты находятся в их собственных серверных блоках. Если я отключу основной сайт, остальные работают так, как предполагалось, поэтому кажется, что что-то в первичной конфигурации перехватывает другие. Любая помощь будет оценена по достоинству.nginx 301 перенаправить на неправильный vhost

/etc/nginx/nginx.conf:

user nginx; 
worker_processes 8; 
worker_rlimit_nofile 100000; 

error_log /var/log/nginx/error.log notice; 
pid  /var/run/nginx.pid; 

events { 
    worker_connections 4096; 
    multi_accept on; 
    use epoll; 
} 

http { 
    include  /etc/nginx/mime.types; 
    default_type application/octet-stream; 
    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
        '$status $body_bytes_sent "$http_referer" ' 
        '"$http_user_agent" "$http_x_forwarded_for"'; 
    #access_log /var/log/nginx/access.log; 
    access_log off; 
    gzip on; 
    gzip_disable "msie6"; 
    gzip_vary on; 
    gzip_proxied any; 
    gzip_comp_level 6; 
    gzip_min_length 1100; 
    gzip_buffers 16 8k; 
    gzip_http_version 1.1; 
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 
    open_file_cache max=2000 inactive=20s; 
    open_file_cache_valid 60s; 
    open_file_cache_min_uses 5; 
    open_file_cache_errors off; 
    client_max_body_size 50M; 
    client_body_buffer_size 1m; 
    client_body_timeout 15; 
    client_header_timeout 15; 
    keepalive_timeout 2 2; 
    send_timeout 15; 
    sendfile on; 
    tcp_nopush on; 
    tcp_nodelay on; 
    fastcgi_buffers 256 16k; 
    fastcgi_buffer_size 128k; 
    fastcgi_connect_timeout 3s; 
    fastcgi_send_timeout 120s; 
    fastcgi_read_timeout 120s; 
    fastcgi_busy_buffers_size 256k; 
    fastcgi_max_temp_file_size 0; 
    reset_timedout_connection on; 
    server_names_hash_bucket_size 100; 
    fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=microcache:10m max_size=1000m inactive=60m; 
    ssl_session_cache shared:SSL:10m; 
    ssl_session_timeout 10m; 
    include /etc/nginx/conf.d/*.conf; 
} 

Это ВХост конф, что, как представляется, превосходя другие ВХосты. /etc/nginx/conf.d/site1.conf:

server { 
     listen 10.10.10.1:80; 
     listen 10.10.10.1:443 ssl; 
     server_name ^site1\.org$ ^www\.site1\.org$ ^old\.site1domain\.org$; 
     ssl_certificate ...; 
     ssl_certificate_key ...; 
     ssl_protocols  TLSv1 TLSv1.1 TLSv1.2; 
     ssl_ciphers   HIGH:!aNULL:!MD5; 
     keepalive_timeout 70; 
     root /var/www/vhosts/site1.org/httpdocs; 
     index index.php; 
     client_max_body_size 128M; 
     location ~ \.php$ { 
       try_files $uri =404; 
       fastcgi_split_path_info ^(.+\.php)(/.+)$; 
       fastcgi_index index.php; 
       fastcgi_pass unix:/var/run/php-fpm/site1.sock; 
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
       fastcgi_param PATH_INFO $fastcgi_path_info; 
       include /etc/nginx/fastcgi_params; 
       include /etc/nginx/fastcgi.conf; 
       open_file_cache   max=4000 inactive=20s; 
       open_file_cache_valid 30s; 
       open_file_cache_min_uses 2; 
       open_file_cache_errors on; 
     } 
     add_header Strict-Transport-Security "max-age=31536000; includeSubdomains"; 
     if ($scheme != "https") { 
       rewrite^https://site1.org$uri permanent; 
     } 
     if ($host != "site1.org") { 
       rewrite^https://site1.org$uri permanent; 
     } 
     #wp-super-cache 
     .... 
     location ~* .(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|tar|mid|midi|wav|bmp)$ { 
       expires max; 
     } 

}

Уф. Хорошо, вот пример другой конфигурации vhost, которая, кажется, не отвечает на запросы (вместо этого я получаю 301 к vhost выше, с или без переадресаций, прокомментированных).

/etc/nginx/conf.d/site2.conf:

server { 
    listen 10.10.10.1:80; 
    server_name ^sub1\.site2\.org$; 
    allow all; 
    proxy_redirect/http://10.10.10.1:6969; 
    location/{ 
      proxy_pass http://10.10.10.1:6969; 
    } 
} 

Однако, по какой-то причине этот SSL прокси работает как задумано (на разных IP): /и т.д./Nginx/конф. d/site3.conf:

server { 
     listen 10.10.10.2:443 ssl; 
     server_name ^sub3\.site1\.org$; 
     ssl_certificate  ...; 
     ssl_certificate_key ...; 
     ssl_protocols  TLSv1 TLSv1.1 TLSv1.2; 
     ssl_ciphers   HIGH:!aNULL:!MD5; 
     allow all; 
     proxy_redirect/http://sub3.site1.org:80/; 
     location/{ 
      proxy_pass http://sub3.site1.org:80/; 
     } 
     proxy_set_header Host $http_host; 
} 

Вот что я получаю, когда я пытаюсь подключиться к http://sub1.site2.org:

[C09] 79 /etc/nginx/conf.d # Wget {sub1.site2.url } --2015-11-25 09: 09: 28-- {sub1.site2.url} Решение sub1.site2.org ... 10.10.10.1 Подключение к sub1.site2.org | 10.10.10.1 |: 80. .. связанный. запрос HTTP послан, ожидается ответ ... 301 Окончательно перемещено Адрес: {site1.url} [следующие]

и так далее ... Спасибо заранее.

ответ

0

Ваши директивы server_name являются недействительными, поэтому ни одна из них не соответствует. Таким образом, nginx использует первый контейнер server по умолчанию и обрабатывает все запросы через него.

Затем он обращается к вашему rewrite^https://site1.org$uri permanent; условному переписыванию.

Если вы должны использовать регулярное выражение в своем server_name (хотя оно менее эффективно, если оно вам действительно не нужно), вы должны указать имя ~. В противном случае просто используйте простое имя.

server_name site1.org www.site1.org old.site1domain.org; 

Для получения более подробной информации см. this document.

Смежные вопросы