nginx http转 https
场景
项目前期使用http,后期为了安全方面的考虑,启用了https。
项目架构:前端使用nginx作为多个tomcat实例的反向代理和负载均衡。
实际上只需要在nginx上启用https即可,使客户端与nginx之后使用https方式通信,而nginx与tomcat之间依然以http方式通信。
现在需要将之前客户端所有的http请求全部都自动重定向为https,只需要在nginx上添加相应配置即可。
如下配置实现来源于Nginx HTTP 跳转至 HTTPS,但是我都实践验证过。
另外,也加入了一些自己的理解整理而成。
方式1:使用rewrite指令
server {
listen 80;
server_name domain.com;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl;
server_name domain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/domain.com.crt;
ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
# other
}
如果此时nginx作为Tomcat的前端反向代理的话,需要将相应配置放在配置ssl的server块中。
方式2:使用return指令
server {
listen 80;
server_name domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name domain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/domain.com.crt;
ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
# other
}
如果此时nginx作为Tomcat的前端反向代理的话,需要将相应配置放在配置ssl的server块中。
方式三:使用error_page指令
只允许HTTP来访问时,用HTTP访问会让Nginx报497错误,然后利用error_page将链接重定向至HTTPS上。
server {
listen 80;
listen 443 ssl;
server_name domain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/domain.com.crt;
ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
# other
error_page 497 https://$server_name$request_uri;
}
使用error_page指令时,将http和https的监听配置写在同一个server块中,对应的其他配置也需要在该server配置块中完成。
需要注意的是,此时需要将error_page
指令语句写在最后,否则不能生效。
参考: https://www.cnblogs.com/nuccch/p/7681592.html
最新文章
- 看懂UML类图
- 我的WafBypass之道
- [Linux]centOS7下RPM安装Perl
- 【iCore3 双核心板_FPGA】例程九:状态机实验——状态机使用
- MFC resizer封装
- ios统计代码行数
- Spring4.0MVC学习资料,ApplicationContext中的方法具体解释(三)
- Hadoop之——HBase注意事项
- 3403: [Usaco2009 Open]Cow Line 直线上的牛
- 享元模式(Flyweight)
- Codeforces 895C - Square Subsets 状压DP
- java实现马踏棋盘问题
- sqlServer 获取最新的一条数据
- Spark join连接
- .NET Framework 类库——C#命名空间大全
- HTML解析库Gumbo简单使用记录
- JMeter TCP性能测试
- MySql查询出来的值为 boolean类型的值
- scala-04-set操作
- 证书(Certificate)与描述文件(Provisioning Profiles)
热门文章
- gdb pretty printer for STL debug in Linux
- angularjs 下滑线滑动
- C#语句从MySQL中简单的读取数据库信息
- prototype和__proto__的关系是什么
- 网络知识梳理--OSI七层网络与TCP/IP五层网络架构及二层/三层网络(转)
- Ubuntu16.04+CUDA8.0+cuDNN5.1+Python2.7+TensorFlow1.2.0环境搭建
- git 在某个分支下创建新分支
- POJ 1284:Primitive Roots(素数原根的个数)
- Arch Linux 独特的包管理器相关名词解释及用法对照
- 《Linux内核原理与分析》第三周作业