Nginx配置http强转https,参数丢失问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx配置http强转https,参数丢失问题相关的知识,希望对你有一定的参考价值。
参考技术A 在nginx配置文件加上这个判断就,重启Nginx就可以了。rewrite ^(/.*)$ https://$host/$1 permanent;这句命令可以使http强制跳转https,但是APP在使用post方式调http接口时,服务器自动将post请求改为get请求,参数丢失。return 307 https://$server_name$request_uri;命令可以使301转为307,这时APP调接口接可以正常使用了。不过有时候ios可以正常调用,但是android调不起,就需要Android改配置了。
nginx https配置多域名共享SSL证书禁止ip访问http强转https
nginx https配置
server
listen 443 ssl;
server_name www.example.com;
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
...
按照nginx官方文档所说,要支持https,只需要配置listen
、ssl_certificate
、ssl_certificate_key
三项,ssl_certificate
是公钥,通常称为公钥证书,客户端请求建立连接时服务端会将公钥发送给客户端,ssl_certificate_key
是私钥,需要保密,私钥存在服务器端,建立连接时,不会发送到客户端;ssl_protocols
、ssl_ciphers
可以不指定,使用默认值即可。
nginx单ip多域名共享SSL证书
Https证书的SubjectAltName字段可以准确指定适配域名,比如a.domain.com
、b.domain.com
,但有长度限制;SubjectAltName字段还可以指定通配符域名,比如*.domain.com
,它只能覆盖一级,a.domain.com
,b.doamin.com
,但不能覆盖domain.com
;通常可以将这两种使用方式结合起来,比如domain.com
、*.domain.com
。
单ip多域名情况,应该如何配置证书呢?
答案是在http块中配置SSL,这样server块会继承http中的ssl证书配置,SSL证书只占一块内存,与各个server中配置相比能节省内存。
http
ssl_certificate common.crt;
ssl_certificate_key common.key;
server
listen 443 ssl;
server_name www.example.com;
...
server
listen 443 ssl;
server_name www.example.org;
...
查看证书内容
也许你会好奇,应该怎么查看SSL证书的域名信息呢?拿百度为例。
点击地址栏的锁---->连接是安全的---->证书有效---->详细信息---->使用者可选名称
可以看到,证书适配*.baidu.com
和baidu.com
,还有个常见需求查看证书有效期
当然也可以通过命令查看证书内容,那就要用到openssl了,windows安装openssl,选择Win64 OpenSSL v3.0.3 Light版本,这也是官方推荐的版本。
查看证书内容
先将证书导出
点击地址栏的锁---->连接是安全的---->证书有效---->详细信息---->复制到文件----->
勾选base64编码
openssl x509 -in my.cer -noout -text
查看证书链
有时同一个https网站,有的浏览器正常,有的浏览器告警,这大概率是证书签发机构是中间商,不在浏览器的基础签发库里导致,可以将中间商一直到root的签发机构串起来,
cat www.example.com.crt bundle.crt > www.example.com.chained.crt
,注意www.example.com.crt要在前边;
查看证书链命令:
openssl s_client -connect www.baidu.com:443
nginx http强转https
server
listen 80;
return 301 https://$host$request_uri;
- $host 依次从请求url中、request header的Host中、匹配的server_name中获取;
- $request_uri会包含全部参数的原始请求uri
nginx 禁止ip访问
server
listen 80 ;
listen 443 ssl;
server_name 指定ip;
return 403;
以上是关于Nginx配置http强转https,参数丢失问题的主要内容,如果未能解决你的问题,请参考以下文章
nginx https配置多域名共享SSL证书禁止ip访问http强转https
nginx https配置多域名共享SSL证书禁止ip访问http强转https