我有一个运行 nginx 1.6 的 Web 服务器,它有一个 IP 地址,托管 www.domainname.com 和 dev.domainname.com。
我正在尝试找到一种智能方法将所有 http 流量路由到 https,并且我想确保我的默认服务器是当时的“www”实时版本。因此,最终目标是,除非用户指定https://dev.域名.com他们将被重定向到https://www.域名.com。
我的 nginx.conf 设置配置为包含“/etc/nginx/etc/sites-enabled/*”。因此,我的配置示例位于“etc/nginx/sites-enabled/www.domainname.com”。
另外,需要澄清的是,当您访问不带 www 的域名时,我当前的配置在加载开发网站时会出现问题。
编辑:我刚刚在本地尝试了这种方法,但“/etc/nginx/sites-enabled/'。有没有更好的解决方案,或者我应该将此配置移到 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;
}
}
答案1
如果你的发行版是基于 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.域名.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
。
答案2
你所需要的只是这个:
server {
listen 80;
server_name *.domainname.com;
return 301 https://$host$request_uri;
}