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


title: nginx泛域名http(80)强制跳转https(443)
date: 2019-04-17 12:30:05
categories: 架构
author: mrzhou
tags:

  • nginx
  • web
  • http
  • https

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

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

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

泛域名证书申请

推荐使用acme.sh来申请,下载地址和使用说明

https://github.com/Neilpang/acme.sh

安装很简单, 一个命令:

curl  https://get.acme.sh | sh

并且acme.sh 支持大多数国内知名dns的api方式。比如dnspod,aliyun,只需要在相应的平台上申请id和key即可使用api方式使用acme.sh,非常方便,申请证书一条命令就搞定了。
以下命令使用dnspod的api方式申请easex.cn泛域名证书,其下的所有子域名均可以使用。

acme.sh --issue -d easex.cn -d *.easex.cn --dns dns_dp

申请到的证书默认存放在 当前用户的 ~/.acme.sh/easex.cn(域名)目录下。你可以copy出来,或者使用 acme.sh的install-cert命令来安装到指定目录。

nginx的配置

nginx的安装就不说了,在centos下通常用yum 来安装,也可以自己编译。这里只说配置一事。网上虽然有很多关于http跳转https的配置,但都只针对单域名的,对泛域名都无法使用。
以下是本人使用着的配置,供大家参考。

upstream tomcat9 {
	server 127.0.0.1:8080;
}
server {
	listen 80;
	server_name *.easex.cn;
	return 301 https://$http_host$request_uri;
}
server {
	listen 443 ssl http2;
	server_name *.easex.cn;
	
	ssl_certificate  	cert/easex.cn/fullchina.cer;
	ssl_certificate_key cert/easex.cn/easex.cn.key;
	ssl_session_timeout 5m;
	ssl_protocols TLSV1 TLSv1.1 TLSv1.2;
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
	ssl_prefer_server_ciphers on;
	
	access_log logs/easex.cn_access.log;
	error_log  logs/easex.cn_error.log;
				
	location / {
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection "upgrade";

		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header Host $host;
		proxy_redirect off;

		proxy_pass http://tomcat9/;
	}

}

这里的server_name均指定的为 *.easex.cn,重点就在于 return 301 https://$http_host$request_uri;这一句。在这里不得不提一下不管是使用 h o s t 还 是 host还是 hostserver_name,都不能让浏览器正常跳转到相应的子域名,只有使用$http_host这样才可以,困绕了我两天时间。
通过以上配置,80端口被强制跳转到了443,但443中通过 proxy_pass http://tomcat9/;实际还是跳转回了http的原始端口,但对外,浏览器和用户所看到的确实是https了,并且显示的是安全网站。

注意事项

服务器应该要开放 80 443端口。

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 要实现nginx http自动跳转https,需要在nginx配置文件中添加以下代码: ``` server { listen 80; server_name yourdomain.com; return 301 https://$server_name$request_uri; } ``` 其中,yourdomain.com需要替换成你的域名。 这段代码的作用是监听80端口,当有http请求访问时,自动将请求重定向到443端口的https协议。 添加完毕后,需要重新加载nginx配置文件,使其生效。可以使用以下命令: ``` sudo nginx -s reload ``` 这样,当用户访问你的网站时,如果使用http协议,会自动跳转https协议,保证网站的安全性。 ### 回答2: Nginx是一个非常流行的Web服务器和反向代理服务器。它可以用于许多用途,其中之一是将HTTP自动重定向到HTTPS。这是因为HTTPS是一个更安全的协议,可保护用户的隐私和敏感信息。 要实现HTTP自动重定向到HTTPS,必须进行以下操作: 1.在Nginx配置文件中添加HTTPS服务器块。这是必要的,因为HTTPS服务器需要证书和密钥来进行加密通信。可以在一台服务器上设置多个服务器块,每个服务器块可以具有不同的IP地址或端口。 2.在HTTP服务器块中添加重定向指令。有两种常用的重定向指令可以使用。一种是使用return指令,它将客户端的URL重定向到指定的URL。另一种是使用rewrite指令,它允许您对URL进行更复杂的重定向操作,包括更改QUERY_STRING和其他操作。 3.将HTTP服务器块更改为重定向到HTTPS服务器块。可以将所有的HTTP请求都重定向到HTTPS服务器块。这可以通过在HTTP服务器块中添加server_name指令来实现,该指令将包含匹配的主机名。然后可以使用重定向指令将客户端的URL重定向到对应的HTTPS服务器块。 4.配置HTTPS服务器块以使用SSL。必须使用Nginx的SSL模块来配置服务器块以使用SSL。这可以通过在块中添加ssl on指令来实现。还需要配置SSL证书和密钥。 完成上述步骤后,Nginx将自动将HTTP请求重定向到HTTPS。这可以确保在用户进行通信时保护敏感信息的安全性。 ### 回答3: Nginx是一款流行的Web服务器和反向代理服务器,它可以处理大量的HTTP请求和静态文件。许多网站都要求将HTTP请求自动转发到HTTPS,以确保网站的安全性。在此过程中,Nginx可以帮助我们实现HTTP自动跳转HTTPS。今天,我们将探讨如何在Nginx上实现HTTP自动跳转HTTPS。 要实现HTTP自动跳转HTTPS,我们需要在Nginx的服务器配置中添加以下代码: server { listen 80; server_name yourdomain.com; return 301 https://$server_name$request_uri; } 通过添加此代码段,我们可以在Nginx服务器中定义一个HTTP服务监听端口。当HTTP请求到达时,它将会自动转发到HTTPS。返回的“301”是一个重定向HTTP代码,它告诉浏览器当前请求被永久重定向到HTTPS。 您还可以使用以下代码实现HTTPHTTPS服务器的配置: server { listen 80; server_name yourdomain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /path/to/ssl.crt; ssl_certificate_key /path/to/ssl.key; # HTTPS server configuration } 在这个配置中,我们提供了两个服务器块,一个是HTTP服务器块,另一个是HTTPS服务器块。与前面的服务器配置段类似,此配置要求HTTP请求被自动重定向到HTTPS。 总结: 使用NginxHTTP请求自动重定向到HTTPS对网站安全至关重要。实现这一目标的最简单方法是在Nginx服务器的配置中定义HTTP服务器监听端口并使用“301”代码自动将请求转发到HTTPS。通过正确的配置和实现,您可以确保您的站点在网络中的安全性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜜友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值