Nginx 阻止多個域將所有流量重定向到 https?
我有一台執行 nginx 1.6 的 Web 伺服器,它有一個 IP 地址並託管 www.domainname.com 和 dev.domainname.com。
我正在嘗試找到一種將所有 http 流量路由到 https 的智能方法,並且我想確保我的預設伺服器是當時的“www”實時版本。所以最終目標是除非使用者指定https://dev.domainname.com ,否則他們將被重定向到https://www.domainname.com。
我的 nginx.conf 設置配置為包含“/etc/nginx/etc/sites-enabled/*”。所以我的配置範例位於’etc/nginx/sites-enabled/www.domainname.com’。
另外,澄清一下。當您訪問沒有 www 的域時,我目前的配置在載入開發站點時出現問題。
編輯:我只是在本地嘗試了這種方法,並且在’/etc/nginx/sites-enabled/‘中不允許使用http和https。是否有更好的解決方案或者我應該將此配置移動到 nginx.conf 中?*
所以我的問題是有更好的方法來處理這種類型的設置嗎?
http { # all traffic should be over https listen 80 default; # listen for all server names server_name *.domainname.com; # redirect to www with https return 301 $scheme://www.domainname.com$request_uri; } https { # configuration for all https sites listen 443 default ssl; ssl on; index index.html index.htm index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } access_log off; error_page 404 /index.php; location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } location ~ /\.ht { deny all; } # configuration for the non-www redirect server { # non-www server name server_name domainname.com; # return to www return 301 $scheme://www.domainname.com$request_uri; } # configuration for the live website server { # www server name server_name www.domainname.com; # root to public directory root /path/to/www.domainname.com/public; # ssl certificates ssl_certificate /etc/nginx/ssl/www.domainname.com/ssl-bundle.crt; ssl_certificate_key /etc/nginx/ssl/www.domainname.com/server.key; # error logs for www site error_log /var/log/nginx/www.domainname.com-error.log error; } # configuration for the dev site server { # dev server name server_name dev.domainname.com; # root to public directory root /path/to/dev.domainname.com/public; # ssl certificates - using multi domain ssl ssl_certificate /etc/nginx/ssl/www.domainname.com/ssl-bundle.crt; ssl_certificate_key /etc/nginx/ssl/www.domainname.com/server.key; # error logs for dev site error_log /var/log/nginx/dev.domainname.com-error.log error; } }
如果您的發行版是基於 Debian 的,那麼您已經
sites-available/default
安裝了文件。那是為 nginx 配置預設頁面的文件。你需要通過執行它的符號連結來禁用這個虛擬主機
rm sites-enabled/default
。然後,您需要
default
使用以下內容新建一個:server { listen 80 default_server; listen 443 default_server ssl; server_name _; ssl_certificate /path/to/your/certificate; ssl_certificate_key /path/to/your/key; redirect 301 https://www.domainname.com$request_uri; }
此塊可確保對未在任何地方列出的其他域的所有請求都重定向到https://www.domainname.com。
然後,製作另一個文件,例如
dev.domainname.com
:server { listen 443 ssl; server_name dev.domainname.com; ssl_certificate /path/to/your/certificate; ssl_certificate_key /path/to/your/key; # Other config for dev.domainname.com }
此塊處理對
dev.domainname.com
.最後,
www.domainname.com
:server { listen 443 ssl; server_name www.domainname.com; ssl_certificate /path/to/your/certificate; ssl_certificate_key /path/to/your/key; # Other config for www.domainname.com }
這個塊處理對
www.domainname.com
.