场景

项目前期使用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

最新文章

  1. 看懂UML类图
  2. 我的WafBypass之道
  3. [Linux]centOS7下RPM安装Perl
  4. 【iCore3 双核心板_FPGA】例程九:状态机实验——状态机使用
  5. MFC resizer封装
  6. ios统计代码行数
  7. Spring4.0MVC学习资料,ApplicationContext中的方法具体解释(三)
  8. Hadoop之——HBase注意事项
  9. 3403: [Usaco2009 Open]Cow Line 直线上的牛
  10. 享元模式(Flyweight)
  11. Codeforces 895C - Square Subsets 状压DP
  12. java实现马踏棋盘问题
  13. sqlServer 获取最新的一条数据
  14. Spark join连接
  15. .NET Framework 类库——C#命名空间大全
  16. HTML解析库Gumbo简单使用记录
  17. JMeter TCP性能测试
  18. MySql查询出来的值为 boolean类型的值
  19. scala-04-set操作
  20. 证书(Certificate)与描述文件(Provisioning Profiles)

热门文章

  1. gdb pretty printer for STL debug in Linux
  2. angularjs 下滑线滑动
  3. C#语句从MySQL中简单的读取数据库信息
  4. prototype和__proto__的关系是什么
  5. 网络知识梳理--OSI七层网络与TCP/IP五层网络架构及二层/三层网络(转)
  6. Ubuntu16.04+CUDA8.0+cuDNN5.1+Python2.7+TensorFlow1.2.0环境搭建
  7. git 在某个分支下创建新分支
  8. POJ 1284:Primitive Roots(素数原根的个数)
  9. Arch Linux 独特的包管理器相关名词解释及用法对照
  10. 《Linux内核原理与分析》第三周作业