2014-03-31 161 views
0

我一直在使用Apache作爲項目,並且現在已決定將性能轉換爲nginx,因爲項目已經發展了很多。將基本域重定向到HTTPS,並將子域重定向到HTTP

對於此項目,我們通過HTTPS提供基本域和www子域,但需要通過HTTP爲所有其他子域提供服務。

在Apache中,我能夠與RewriteEngine敘述執行以下操作來實現:

RewriteEngine On 

#Redirect domain and www to HTTPS 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} =mydomain.com [OR] 
RewriteCond %{HTTP_HOST} =www.mydomain.com 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

#Redirect wildcard subdomains to HTTP 
RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_HOST} ^(.+)\.mydomain\.com [NC] 
RewriteCond %{HTTP_HOST} !=www.mydomain.com 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

我有我的nginx的一半建立網站,配置的這部分已經難倒我。我如何去轉換這個與nginx一起工作?

回答

1

我把答案分爲4個虛擬主機。前兩個解決了http到主域之間的https重定向。第二部分捕獲的子域和重定向從https到http:

# FIRST PART --------------- 
# from http to https on main domains     
server {            
    listen 80;           
    server_name domain www.domain;      

    location/{          
    return 301 https://$host$request_uri;    
    }             
}              

server { 
    listen 443 ssl; 
    server_name domain www.domain; 

    # blah, blah, https and virtualhost configuration     
}              



# SECOND PART --------------- 
# from https to http and others subdomains   
server {            
    listen 443 ssl;          
    server_name *.domain;        

    # blah, blah, https configuration     
    location/{          
    return 301 http://$host$request_uri    
    }             
}              

server {            
    listen 80;           
    server *.domain;          
    # virtual with http configuration     
} 
+0

我在哪裏實現www到非www重定向與此解決方案? – xxdrivenxx

+0

此外,您的解決方案將重定向從http到https的所有內容。所有通配符子域都被髮送到SSL。 – xxdrivenxx

+0

在你的問題中,你要求www而不是www要通過SSL處理。據此,我明白www.domain和domain應該通過處理SSL(第一部分)。 – alfredocambera