我在一个子域上有一个注册页面,比如。https://signup.example.com
它应该只能通过HTTPS访问,但我担心人们会通过HTTP偶然发现它并得到404的结果。
我在nginx中的html/server块看起来像这样。
html {
server {
listen 443;
server_name signup.example.com;
ssl on;
ssl_certificate /path/to/my/cert;
ssl_certificate_key /path/to/my/key;
ssl_session_timeout 30m;
location / {
root /path/to/my/rails/app/public;
index index.html;
passenger_enabled on;
}
}
}
我可以添加什么,使进入http://signup.example.com
的人被重定向到https://signup.example.com
?(我知道有一些Rails插件可以强制使用SSL
,但我希望能避免这种情况)
根据nginx pitfalls,省略不必要的捕获,使用`$request_uri'来代替,会更好一些。在这种情况下,添加一个问号,以防止nginx将任何查询条件加倍。
server {
listen 80;
server_name signup.mysite.com;
rewrite ^ https://$server_name$request_uri? permanent;
}
如果你使用新的HTTP和HTTPS双服务器定义,你可以使用以下方法。
server {
listen 80;
listen [::]:80;
listen 443 default ssl;
server_name www.example.com;
ssl_certificate /path/to/my/cert;
ssl_certificate_key /path/to/my/key;
if ($ssl_protocol = "") {
rewrite ^ https://$server_name$request_uri? permanent;
}
}
这似乎对我有用,而且不会导致重定向循环。
编辑:
替换掉了。
rewrite ^/(.*) https://$server_name/$1 permanent;
与Pratik'的重写行。