首页 > 系统相关 >nginx泛域名http(80)强制跳转https(443)

nginx泛域名http(80)强制跳转https(443)

时间:2024-06-06 11:15:21浏览次数:17  
标签:http log nginx 443 drift server ssl 跳转

nginx泛域名http(80)强制跳转https(443)

随着chrome浏览器在地址栏开始标注网站『不安全』的提示开始,各大小网站都开始从http转为https了,并且都更注重网站的安全了。然页我们之前的很多站点都是基于http开发的,如果全部改造成https,必然是很大的工作量,幸好有第三方的工具可以为我们解决这个问题,可以让原有的系统不改动的情况下,或者少改动的情况下就能够满足这个需求。nginx就是其中使用最为广泛的一个,并且它的响应最快,目前国内绝大多数平台或者系统在前端都使用的是nginx或者nginx的变种。

为每个域名(子域名)申请证书,然后配置nginx,这样就可以解决https证书问题。但为每个域名或者子域名都申请一个证书,暂起不说费用问题,申请也是比较麻烦的事,所以申请一个支持泛域名的能用证书是最方便的,所有子域名都可以使用该证书,肯定是最快捷的。

业务需求:

通过NGINX方向代理实现转发,并要求不论http或https.最终实现https方式访问网站.

单域名的:

upstream drift {
server IP:prot
}
server {
listen 80;
server_name drift.hk;
server_name www.drift.hk;
rewrite ^ https://www.drift.hk$request_uri? permanent;
}
server {
listen 443 ssl;
server_name www.drift.hk;
location = /favicon.ico {
return 404;
}
charset utf-8;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
proxy_pass http://drift;
}
ssl_certificate /root/project/ssl/drift.crt;
ssl_certificate_key /root/project/ssl/drift.key;
ssl_session_timeout 5m;

access_log /var/log/nginx/wwwhk_access.log;
error_log /var/log/nginx/wwwhk_error.log;
}

以上这种方式,只能实现单域名的转发,而不能实现泛域名的转发

泛域名转发:

upstream drift {
server IP:prot;
server IP:prot;
}
server {
listen 80;
server_name *.drift.hk;
return 301 https://$http_host$request_uri;
}
server {
listen 443 ssl;
server_name *.drift.hk;
gzip on;
gzip_min_length 1k;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png font/ttf font/otf image/svg+xml; #
gzip_vary on;
gzip_disable "MSIE [1-6].";

location = /favicon.ico {
return 404;
}
charset utf-8;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
proxy_pass http://starwthk;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

ssl_certificate /root/project/ssl/drift_hk.crt;
ssl_certificate_key /root/project/ssl/drift.hk.key;

ssl_session_cache shared:SSL:1m;

ssl_session_timeout 5m;

access_log /var/log/nginx/all_bosshk_access.log;
error_log /var/log/nginx/all_bosshk_error.log;
}

这里的server_name均指定的为 *.drift.hk ,

重点就在于 [ return 301 https://http_host$request_uri ] 这一句。

在这里不得不提一下不管是使用server_name,都不能让浏览器正常跳转到相应的子域名,

只有使用$http_host这样才可以.

通过以上配置,80端口被强制跳转到了443,但443中通过 proxy_pass http://drift/;

实际还是跳转回了http的原始端口,但对外,浏览器和用户所看到的确实是https了,并且显示的是安全网站。

重要的概念:

$host 包含"按此优先顺序:来自请求行的主机名,或来自主机,请求行字段的主机名,或与请求匹配的服务器名称".

$http_host 包含HTTP “host” 头字段的内容(如果它存在请求中).

$server_name 包含处理请求的的虚拟主机的server_name,因为它在NGINX配置中定义的,如果服务器包含多个server_name,则此变量中只存在第一个server_name.

$request_uri 这个变量等于从客户端发送来的原生请求URI,包括参数。它不可以进行修改。

url这个变量指当前的请求URI,不包括任何参数(见url 这个变量指当前的请求URI,不包括任何参数(见url这个变量指当前的请求URI,不包括任何参数(见args)。这个变量反映任何内部重定向或index模块所做的修改。注意,这和requesturi不同,因request_uri不同,因request

u

ri不同,因request_uri是浏览器发起的不做任何修改的原生URI。不包括协议及主机名。

rewrite redirect – 返回302临时重定向,地址栏显示重定向后的url,爬虫不会更新url(因为是临时)

rewrite permanent – 返回301永久重定向, 地址栏显示重定向后的url,爬虫更新url.

由于用户代理在请求行而不是在Host:头部发送的主机名是合法的 ,尽管除了连接到代理之外很少进行,但是你必须考虑到这一点.

标签:http,log,nginx,443,drift,server,ssl,跳转
From: https://www.cnblogs.com/qun-/p/18234717

相关文章

  • 访问托管在运行 IIS 的服务器上的网站时出现 HTTP 错误 405.0
    问题:客户端请求部署在IIS中的APS.NETCOREAPI时,get请求正常,但delete和put请求报405错误解决方法:在控制面版本-》程序功能-》启用关闭Windows功能中的,IIs-》常见Http->WebDAV发布(删除),后恢复正常。即当前症状:3本文内容症状原因1原因2原因3显示另外3个本文可帮......
  • node基于自签名证书搭建https服务
    原文链接:https://www.cnblogs.com/yalong/p/18232314描述基于node.js搭建一个https静态资源服务,由于只是本地用,所以使用自签名的ssl证书就行了我用的mac系统,系统自带有openssl的,其他系统如果没有请先安装使用Openssl生成CA证书生成root密钥:opensslgenrsa-outroot......
  • HttpContext探究之RequestServices
    HttpContext探究之RequestServices在一篇随笔中提到了中间件的构造方式,主要有两种,第一种是直接从容器里面获取,第二种是构造函数的参数从容器里面获取,这两者都离不开容器,也就是serviceprovide,而RequestService则是里面重要的内容RequestServices是什么HttpContext.RequestServi......
  • HarmonyOS(二十三)——HTTP请求实战一个新闻列表
    在前一篇文章,我们已经知道如何实现一个http请求的完整流程,今天就用官方列子实战一个简单的新闻列表。进一步掌握ArkTS的声明式开发范式,数据请求,常用系统组件以及touch事件的使用。主要包含以下功能:数据请求。列表下拉刷新。列表上拉加载。看一下最终的效果。1.实战分析......
  • http1.1 的默认长连接 Connection: keep-alive 与 TCP KeepAlive 之间区别
     HTTP长连接,也称为HTTP持久连接(HTTPPersistentConnection)或HTTP连接重用,是一种在HTTP协议中实现的机制。在传统的HTTP通信中,每个HTTP请求和响应都会伴随着TCP连接的建立和关闭,这在高并发场景下会增加网络开销和延迟。而HTTP长连接则允许客户端和服务器在完成......
  • 构建HTTP Server容器Docker构建一个简单的HTTP Server。
    构建HTTPServer容器Docker构建一个简单的HTTPServer。HTTPServer在访问根路径/时返回"Hello,World!"。提供完整的Dockerfile和启动命令。步骤1:创建HTTPServer的Python脚本首先,创建一个目录来存放HTTPServer文件:mkdirhttp_servercdhttp_server在这个目录中,创建一......
  • Ollama,在centos7宿主机上,curl http://宿主机IP:11434 提示拒绝访问 ,但是curl http://l
    Ollama,在centos7宿主机上,curlhttp://宿主机IP:11434提示拒绝访问,但是curlhttp://localhost:11434 正常 1.使用 netstat 或 ss 命令在宿主机上检查 11434 端口的状态[root@localhost~]#netstat-tulnp|grep11434tcp00127.0.0.1:11434......
  • [Proxy] 使用 Charles 对 Android 应用进行 HTTPS 数据抓包
    抓包工具Charleshttps://www.charlesproxy.com/操作步骤1.在电脑上安装Charles客户端并进行配置1.1设置ProxySetting1.2设置 SSLProxingSetting1.3重启Charles客户端2.在手机上安装Charles证书2.1将手机与电脑连接到同一WIFI网络2.2设置手机WIF......
  • 前端引入,Web服务器的本质,HTTP协议,HTML基础,常用标签介绍
    Ⅰ前端引入【一】前端/后端【1】什么是前端任何与用户直接打交道的操作界面都可以称之为前端前端可以是浏览器的界面、也可以是客户端的界面、还可以是手机的界面...比如电脑界面、手机界面、平板界面【2】什么是后端不直接与用户打交道的用于执行真正业务逻辑的代......
  • golang net/http 的 ListenAndServe 的工作方式(取代 listen、accept)
      在Go的net/http包中,当你使用ListenAndServe或ListenAndServeTLS函数启动一个HTTP服务器时,你不需要直接调用listen和accept操作,因为这些函数已经为你处理了这些底层的网络细节。 ListenAndServe函数的工作方式如下:1.它首先调用net.Listen来监听指定的网络地......