2017-11-28 13 views
0

Wordpress MU 설치에서 2 개의 도메인을 사용하도록 설정했습니다. 주요 질문 : 두 영역을 모두 이해하기 위해 바니시를 올바르게 구성하는 방법은 무엇입니까?니스 nginx wordpress ssl 여러 도메인

나는 다음 설정이 있습니다

Nginx의 프론트 엔드 -> 니스 캐시 -> 니스 백엔드

네트워크는 다음과 같이 구성

: 80 : 443 로컬 변환됩니다 포트에 대한 내 진짜 IP에 대한 모든 요청 IP 192.168.1.70 to Nginx. Nginx는 모든 요청을 80에서 443으로 변경했습니다. 그런 다음 모든 요청이 바니시로 전달됩니다. 캐시가없는 경우 Varnish는 백엔드에 요청합니다. nginx를위한

4 설정 파일 : 프론트 엔드의

CONFIGS이 proxy_set_header 호스트 ","서버 _ "를 제외하고 유사하다 frontend-domain1.com frontend-domain2.com"옵션

server { 
listen  192.168.1.70:80; 
server_name domain1.com; 
return 301 https://$server_name$request_uri; 
} 

server { 
listen  192.168.1.70:443 ssl; 
server_name domain1.com; 

keepalive_timeout    60 60; 

gzip    on; 
gzip_comp_level  1; 
gzip_min_length  512; 
gzip_buffers  8 64k; 
gzip_types text/plain; 
gzip_proxied  any; 

ssl on; 
ssl_stapling on; 
resolver 8.8.8.8 8.8.4.4; 
ssl_prefer_server_ciphers on; 
ssl_session_cache shared:SSL:10m; 
ssl_session_timeout 5m; 
ssl_certificate  /chain.crt; 
ssl_certificate_key /private.key; 
ssl_dhparam /dhparams.pem; 
ssl_protocols TLSv1.2 TLSv1.1 TLSv1; 
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:E$ 

add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains'; 
location/{ 
    proxy_pass  http://127.0.0.1:6081/; 
    proxy_set_header Host    domain1.com; 
    proxy_set_header X-Real-IP   $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto https; 
    proxy_set_header X-Forwarded-Port 443; 
    } 
} 

백엔드 domain1을 .com backend-domain2.com 백엔드의 구성은 server_name 옵션을 제외하고 비슷합니다.

server { 
listen 127.0.0.1:81; 

root /web/sites/domain1; 
index index.php; 

gzip    on; 
gzip_comp_level  1; 
gzip_min_length  512; 
gzip_buffers  8 64k; 
gzip_types text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml; 
gzip_proxied  any; 

server_name domain1.com; 

location ~ /\. { 
    deny all; 
} 

location/{ 
    try_files $uri $uri/ /index.php?$args; 
} 

rewrite /wp-admin$ $scheme://$host$uri/ permanent; 

location ~ \.php$ { 
    try_files $uri =404; 

location ~* /(?:uploads|files)/.*\.php$ { 
    deny all; 
} 

rewrite /wp-admin$ $scheme://$host$uri/ permanent; 

location ~ \.php$ { 
    try_files $uri =404; 

    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_pass unix:/var/run/php7.0-fpm.sock; 
} 

} 

광택 CONFIGS : 제가

#  if (req.http.cookie ~ "^ *$") { 
#     unset req.http.cookie; 
#  } 

를 주석 처리하면 "req.http.host"

sub vcl_recv { 

    if (req.http.host == "domain1.com") { 
      if (req.url !~ "^/wp-(login|admin)") { 
      unset req.http.cookie; 
      } 
    } 

    set req.http.host = regsub(req.http.host, "^www\.", ""); 
    set req.http.host = regsub(req.http.host, ":[0-9]+", ""); 
    set req.http.Cookie = regsuball(req.http.Cookie, "_ga=[^;]+(;)?", ""); 
    set req.http.Cookie = regsuball(req.http.Cookie, "_gat=[^;]+(;)?", ""); 

    if (req.http.Authorization || req.method == "POST") { 
      return (pass); 
    } 

    if (req.url ~ "wp-(login|admin)" || req.url ~ "preview=true") { 
      return (pass); 
    } 

    if (req.url ~ "sitemap" || req.url ~ "robots") { 
      return (pass); 
    } 

    set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(_[_a-z]+|has_js)=[^;]*", ""); 
    set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", ""); 
    set req.http.Cookie = regsuball(req.http.Cookie, "__qc.=[^;]+(;)?", ""); 
    set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-1=[^;]+(;)?", ""); 
    set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-time-1=[^;]+(;)?", ""); 
    set req.http.Cookie = regsuball(req.http.Cookie, "wordpress_test_cookie=[^;]+(;)?", ""); 

#  if (req.http.cookie ~ "^ *$") { 
#     unset req.http.cookie; 
#  } 

    if (req.url ~ "\.(css|js|png|gif|jp(e)?g|swf|ico|woff|svg|htm|html)") { 
      unset req.http.cookie; 

    if (req.http.Cookie ~ "wordpress_" || req.http.Cookie ~ "comment_") { 
      return (pass); 
    } 

    if (!req.http.cookie) { 
      unset req.http.cookie; 
    } 

    if (req.http.Authorization || req.http.Cookie) { 
      # Not cacheable by default 
      return (pass); 
    } 

    return (hash); 
} 
sub vcl_pass { 
    return (fetch); 
} 

sub vcl_hash { 
    hash_data(req.url); 

    return (lookup); 
} 

sub vcl_backend_response { 

    unset beresp.http.Server; 
    unset beresp.http.X-Powered-By; 

    if (bereq.url ~ "sitemap" || bereq.url ~ "robots") { 
      set beresp.uncacheable = true; 
      set beresp.ttl = 30s; 
      return (deliver); 
    } 
    if (bereq.url ~ "\.(css|js|png|gif|jp(e?)g)|swf|ico|woff|svg|htm|html") 
{ 
      unset beresp.http.cookie; 
      set beresp.ttl = 7d; 
      unset beresp.http.Cache-Control; 
      set beresp.http.Cache-Control = "public, max-age=604800"; 
      set beresp.http.Expires = now + beresp.ttl; 
    } 

    if (bereq.url ~ "wp-(login|admin)" || bereq.url ~ "preview=true") { 
      set beresp.uncacheable = true; 
      set beresp.ttl = 30s; 
      return (deliver); 
    } 

      if (!(bereq.url ~ "(wp-login|wp-admin|preview=true)")) { 
      unset beresp.http.set-cookie; 
    } 

    if (bereq.method == "POST" || bereq.http.Authorization) { 
      set beresp.uncacheable = true; 
      set beresp.ttl = 120s; 
      return (deliver); 
    } 

    if (bereq.url ~ "\?s="){ 
      set beresp.uncacheable = true; 
      set beresp.ttl = 120s; 
      return (deliver); 

    if (beresp.status != 200) { 
      set beresp.uncacheable = true; 
      set beresp.ttl = 120s; 
      return (deliver); 
    } 

    set beresp.ttl = 1d; 
    set beresp.grace = 30s; 

    return (deliver); 
} 

sub vcl_deliver { 
    unset resp.http.X-Powered-By; 
    unset resp.http.Server; 
    unset resp.http.Via; 
    unset resp.http.X-Varnish; 

    return (deliver); 
} 

: default.vcl

vcl 4.0; 

backend default { 
    .host = "127.0.0.1"; 
    .port = "81"; 
} 

acl purge { 
    "localhost"; 
    "127.0.0.1"; 
    "192.168.1.70"; 
} 

sub vcl_recv { 

    if (req.method == "PURGE") { 
      if (!client.ip ~ purge) { 
        return(synth(405, "This IP is not allowed to send PURGE 
requests.")); 
      } 
      return (purge); 
    } 
} 

include "/etc/varnish/domain1.vcl"; 
include "/etc/varnish/domain2.vcl"; 

domain1.vcl domain2.vcl과는 상이 첫 번째 열린 도메인에 대한 색인을 표시합니다. 두 번째 도메인을 무시했습니다. 다른 모든 링크는 완벽하게 작동합니다. 다시 니스를 다시 시작하여 두 번째 도메인에 요청하면 첫 번째 도메인 홈페이지가 표시되지 않습니다.

주요 질문 : 도메인을 모두 이해하기 위해 바니시를 올바르게 구성하는 방법은 무엇입니까?

rus : как корректно заставвить варниш обрабатівать два \ несколько домена \ доменов? 소프트웨어

답변

0

버전 : 니스 4.1.1 수요일 수정 66bb824 Nginx의 버전 : Nginx에/1.10.3 PHP 7.0 FPM

OS : 우분투 16.04.3 LTS

0

니스 투명 HTTP 프록시는 실제로 얼마나 많은 도메인을 통과하는지 신경 쓰지 않습니다. 브라우저에서 백엔드 (nginx)로 보낸 동일한 Host 헤더를 전달합니다.

따라서 nginx 구성 (또는 웹 서버 구성)이 원하는 도메인 이름에서 수신 대기하는지 확인해야합니다.

nginx의 listen 지시어가 브라우저에있는 웹 사이트에 액세스하는 도메인 이름과 동일한 지 확인하십시오. 저것과 같이 쉬운.

proxy_set_header Host $host; 

추신 : 다음 SSL 종료 서버 블록에서

다음은 도메인 이름의 하드 코딩을 방지하는 데 도움이 될 것입니다 글쎄, 당신과 navayal :

+0

하드 인본주의 하나를 수집 (10) 매뉴얼 :)이어야한다. 주요 문제 raskomentirovanii 여기에 그 두 가지 페이지 중 하나를 출력 코드의 작은 조각. –

+0

설치 proxy_set_header 호스트 $ 호스트 지침; 상황이 도움이되지 않았다. –