电脑维修 笔记本维修 手机维修 打印机维修 IT外包
24小时服务电话:0731-84688748  18229718750
地址:长沙市天心区青园街道友谊社区友谊小区A3栋15号

服务区域:湖南省政府方圆5公里内(友谊社区 青园小区 阳光嘉园 天一康园 湘超景园 国际公寓 HOPSCA写字楼 豪布斯卡 天城·泰祥苑 国检园 梦网景园 石人村金石·蓉园安置小区 鑫隆家园 湘诚嘉园 童话里 七星车城 华铁佳苑 巢之恋 鑫远杰座 鑫远华城 满庭芳 宽域 鑫天山水洲城 星语林名园 青园街道进湾子社区 白沙世纪佳园 长沙欧洲城 长沙奥林匹克花园 高升安置小区 湘府名邸 嘉尚君远 富景园 鑫源公寓 岳泰理想城 等等...)

nginx强制使用https访问(http跳转到https)使用配置conf配置文件实现 - 全文内容:

显示技术博客列表

nginx强制使用https访问(http跳转到https)使用配置conf配置文件实现

超短链接

n.yhth.top.conf添加80端口域名监听的设置,这样不需要在硬盘中建立html文件,客户端访问时也不需调用磁盘文件提高反应速度:

$uri 是请求中的当前URI(不带请求参数,参数位于$args

server
    {
        listen 80;
        #listen [::]:80;
        server_name n.yhth.top;
        #index index.html index.htm index.php default.html default.htm default.php;
        #root  /yhvps/www;
        charset utf-8;

        location /
        {
		default_type text/html;
		return 200 "<html><meta http-equiv=\"refresh\" content=\"0;url=https://n.yhth.top$uri\"></html>";
        }
    }

查看n.yhth.top与baidu.com的返回结果一样:

root@localhost:/yhvps/nginx_conf/vhost# curl http://n.yhth.top -vv
* Rebuilt URL to: http://n.yhth.top/
*   Trying 45.62.115.79...
* TCP_NODELAY set
* Connected to n.yhth.top (45.62.115.79) port 80 (#0)
> GET / HTTP/1.1
> Host: n.yhth.top
> User-Agent: curl/7.52.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: nginx
< Date: Tue, 09 Apr 2019 11:01:49 GMT
< Content-Type: text/html; charset=utf-8
< Content-Length: 76
< Connection: keep-alive
< 
* Curl_http_done: called premature == 0
* Connection #0 to host n.yhth.top left intact
<html><meta http-equiv="refresh" content="0;url=https://n.yhth.top/"></html>

以下是学习思路:

需求简介

基于nginx搭建了一个https访问的虚拟主机,监听的域名是test.com,但是很多用户不清楚https和http的区别,会很容易敲成http://test.com,这时会报出404错误,所以我需要做基于test.com域名的http向https的强制跳转

我总结了三种方式,跟大家共享一下

nginx的rewrite方法

思路

这应该是大家最容易想到的方法,将所有的http请求通过rewrite重写到https上即可

配置

server {
 listen 192.168.1.111:80;
 server_name test.com;
 
 rewrite ^(.*)$ https://$host$1 permanent;
}​

搭建此虚拟主机完成后,就可以将http://test.com的请求全部重写到https://test.com上了


nginx的497状态码

error code 497

497 - normal request was sent to HTTPS​

解释:当此虚拟站点只允许https访问时,当用http访问时nginx会报出497错误码

思路

利用error_page命令将497状态码的链接重定向到https://test.com这个域名上

配置

server {
 listen 192.168.1.11:443; #ssl端口
 listen 192.168.1.11:80; #用户习惯用http访问,加上80,后面通过497状态码让它自动跳到443端口
 server_name test.com;
 #为一个server{......}开启ssl支持
 ssl on;
 #指定PEM格式的证书文件 
 ssl_certificate /etc/nginx/test.pem; 
 #指定PEM格式的私钥文件
 ssl_certificate_key /etc/nginx/test.key;
 
 #让http请求重定向到https请求 
 error_page 497 https://$host$uri?$args;
}​

index.html刷新网页

 

思路

上述两种方法均会耗费服务器的资源,我们用curl访问baidu.com试一下,看百度的公司是如何实现baidu.com向www.baidu.com的跳转

可以看到百度很巧妙的利用meta的刷新作用,将baidu.com跳转到www.baidu.com.因此我们可以基于http://test.com的虚拟主机路径下也写一个index.html,内容就是http向https的跳转

index.html

<html>
<meta http-equiv="refresh" content="0;url=https://test.com/">
</html>
nginx虚拟主机配置
server {
 listen 192.168.1.11:80;
 server_name test.com;
 
 location / {
 #index.html放在虚拟主机监听的根目录下
 root /srv/www/http.test.com/;
 }
 #将404的页面重定向到https的首页
 error_page 404 https://test.com/;
}