nginx 配置自动跳转https
强制所有请求使用SSL / TLS
此server阻止块强制所有访问者使用到您站点的安全(SSL / TLS)连接。
server {
listen 80;
server_name www.domain.com;
return 301 https://www.domain.com$request_uri;
}
有关NGINX重写规则的其他一些博客也使用了此用例的if测试和rewrite指令
# NOT RECOMMENDED
if ($scheme != "https") {
rewrite ^ https://www.mydomain.com$uri permanent;
}
或者
# NOT RECOMMENDED
if ($scheme != "https") {
rewrite ^(.*)$ https://www.mydomain.com$1 permanent;
}
return指令
return指令是两个通用指令中的简单指令
因此,我们建议使用它而不是rewrite
示例:将客户端重定向到新域名
server {
listen 80;
listen 443 ssl;
server_name www.old-name.com;
return 301 $scheme://www.new-name.com$request_uri;
}
该 return 指令告诉 NGINX 停止处理请求,并立即向301 (Moved Permanently)客户端发送代码和指定的重写URL
重写的URL使用两个 NGINX 变量来捕获和复制原始请求URL中的值:$scheme 是协议(http或https)
$request_uri 是包含参数的完整URI
对于系列中的代码,该参数定义新的(重写)URL
return (301 | 302 | 303 | 307) url;
对于其他代码,您可以选择定义一个文本字符串,该字符串出现在响应的主体中
- HTTP代码的标准文本,例如Not Foundfor 404,仍包含在标头中
- 文本可以包含NGINX变量
return (1xx | 2xx | 4xx | 5xx) ["text"];
例如,当拒绝没有有效认证令牌的请求时,此指令可能是合适的
return 401 "Access denied because token is expired or invalid";
rewrite指令
如果您需要测试URL之间的更复杂的区别
- 捕获原始URL中没有相应NGINX变量的元素
- 或者更改或添加路径中的元素怎么办
rewrite 语法
rewrite regex URL [flag];
rewrite指令只能返回代码301或302
示例
- 匹配以字符串/ download开头的URL
- 在路径的后面某个位置包含/ media /或/ audio /目录
- 它将这些元素替换为/ mp3 /,并添加适当的文件扩展名.mp3或.ra
server {
# ...
rewrite ^(/download/.*)/media/(\w+)\.?.*$ $1/mp3/$2.mp3 last;
rewrite ^(/download/.*)/audio/(\w+)\.?.*$ $1/mp3/$2.ra last;
return 403;
# ...
}
last示例中的标志是其中之一
- 它告诉NGINX跳过当前server或location块中的任何后续Rewrite-module指令
- 并开始搜索location与重写的URL相匹配的新标志
return此示例中的最终指令意味着,如果URL与任一rewrite指令都不匹配,则代码403将返回给客户端