NGINX同端口HTTP跳转HTTPS

正常情况下,使用HTTPS时,都会使用301、302状态码将80端口的HTTP服务重定向到位于443端口的HTTPS上,但是如果使用非标准端口时,由于需要输入端口号,若直接不带HTTPS前缀访问的话,此时会出现如下界面。


此时只有主动把地址栏中的http://更改为https://才能正常访问。
但是其实这个问题是可以解决的,可以利用497的错误页面。

497 – normal request was sent to HTTPS
当网站只允许https访问时,当用http访问时nginx会报出497错误码(不过实测NGINX返回的状态码是400,但并不影响使用497的error_page)

根据这个思路,那么如果指定error_page为对应的https页面,不就可以实现跳转了吗。在nginx的server块中加入如下配置。

error_page 497 https://$host:$server_port$request_uri;

修改后保存配置文件并重载或重启NGINX。

此时使用http方式去访问,发现已经成功重定向到https页面上了。

使用curl方式测试,发现nginx返回的是302状态码,即临时重定向。
这个办法不支持301重定向,不过301和302的区别只在于浏览器是否缓存,配合HSTS的话对使用影响不大。

顺便记录一下NGINX使用301和302重定向的两种办法

301

#rewrite法
rewrite ^(.*)$ https://$host$1 permanent;

#return法
return 301 https://$server_name$request_uri;

302

#rewrite法
rewrite ^(.*)$ https://$host$1 redirect;

#return法
return 302 https://$server_name$request_uri;
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇