1.弯路:Tomcat支持SSL
腾讯云Tomcat服务器证书配置

修改server.xml文件

keystoreType="JKS":请注意该配置跟阿里云的不一样,记得修改

服务器启动完毕之后443端口也被占用了,真的好坑好坑,如果不需要转发的时候,可以使用改配置。

启动nginx 不成功bind() to 0.0.0.0:443 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions

2.需求概述
当在一个服务器(腾讯云的服务器的IP地址)部署多个服务,不同服务需要通过不同域名访问时,可以通过Nginx代理进行域名转发,同时还可以通过配置SSL模块实现https访问。(我的服务器使用window系统,如果没有SSL模块需要自行开启,默认是支持的)

在一个服务器同时部署3个服务:服务A,服务B和服务C,服务需配置以下域名:

pangsir01.domain.com域名对应服务A;

pangsir02.domain.com域名对应服务B;

pangsir03.domain.com域名对应服务C;

服务通过https访问,http请求重定向至https。

(1)服务代理设置

配置Nginx监听443端口,实现域名转发和https访问,本示例使用的证书是crt格式证书

1)服务A的配置

server {
listen 443 ssl; #监听端口,Nginx1.5后推荐使用
server_name pangsir01.domain.com; #请求域名
ssl_certificate ssl/证书名称A.crt; #crt证书路径,存放位置Nginx的conf/ssl文件夹下,可以使用绝对路径
ssl_certificate_key ssl/证书名称A.key; #crt证书key路径
ssl_session_timeout 5m; #会话超时时间
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #SSL协议

拦截所有请求

location / {
proxy_http_version 1.1; #代理使用的http协议
proxy_set_header Host $host; #header添加请求host信息
proxy_set_header X-Real-IP $remote_addr; # header增加请求来源IP信息
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 增加代理记录
proxy_pass http://127.0.0.1:8001; #服务A访问地址
}
}

2)服务B的配置

server {
listen 443 ssl; #监听端口,Nginx1.5后推荐使用
server_name pangsir02.domain.com; #请求域名
ssl_certificate ssl/证书名称B.crt; #crt证书路径,存放位置Nginx的conf/ssl文件夹下,可以使用绝对路径
ssl_certificate_key ssl/证书名称B.key; #crt证书key路径
ssl_session_timeout 5m; #会话超时时间
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #SSL协议

拦截所有请求

location / {
proxy_http_version 1.1; #代理使用的http协议
proxy_set_header Host $host; #header添加请求host信息
proxy_set_header X-Real-IP $remote_addr; # header增加请求来源IP信息
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 增加代理记录
proxy_pass http://127.0.0.1:8002; #服务B访问地址
}
}
3)服务C的配置

server {
listen 443 ssl; #监听端口,Nginx1.5后推荐使用
server_name pangsir03.domain.com; #请求域名
ssl_certificate ssl/证书名称C.crt; #crt证书路径,存放位置Nginx的conf/ssl文件夹下,可以使用绝对路径
ssl_certificate_key ssl/证书名称C.key; #crt证书key路径
ssl_session_timeout 5m; #会话超时时间
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #SSL协议

拦截所有请求

location / {
proxy_http_version 1.1; #代理使用的http协议
proxy_set_header Host $host; #header添加请求host信息
proxy_set_header X-Real-IP $remote_addr; # header增加请求来源IP信息
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 增加代理记录
proxy_pass http://127.0.0.1:8003; #服务B访问地址
}
}

(2)http请求自动转发

增加server配置,监听80端口,对所有域名进行https重定向

server {
listen 80; #监听端口
server_name a.domain.com b.domain.com c.domain.com; #请求域名
return 301 https:// h o s t host hostrequest_uri; #重定向至https访问。
}
3.WebSocket的SSL配置
假如服务A中使用到websocket(访问接口为:/websocket),需要将ws协议更换为wss协议,可在服务A的server配置中增加一个location配置,拦截websocket进行单独代理。

服务A的配置,修改后:

server {
listen 443 ssl; #监听端口
server_name pangsir01.domain.com; #请求域名
ssl_certificate ssl/证书名称A.crt; #crt证书路径
ssl_certificate_key ssl/证书名称A.key; #crt证书key路径
ssl_session_timeout 5m; #会话超时时间
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #SSL协议

拦截所有请求

location / {
proxy_http_version 1.1; #代理使用的http协议
proxy_set_header Host $host; #header添加请求host信息
proxy_set_header X-Real-IP $remote_addr; # header增加请求来源IP信息
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 增加代理记录
proxy_pass http://127.0.0.1:8001; #服务A访问地址
}

拦截websocket请求

location /websocket {
proxy_pass http://127.0.0.1:8001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
}
}

Nginx转发https访问的实现相关推荐

  1. Nginx转发https请求访问http后端接口

    Nginx转发https请求 问题描述 前后端分离项目,前端使用Nginx部署,后端是Spring Boot项目,使用tomcat部署. Nginx配置了SSL,并且前端项目需要https协议访问.后 ...

  2. windows 上配置 nginx 转发 https

    windows 上配置 nginx 转发 https 1.需求分析 2.前提条件 3.生成证书 3.1.软件 3.2.申请证书 4.修改配置 1.需求分析 工作环境中,使用云桌面(win10)进行开发 ...

  3. 如何部署微信小程序,并且利用Nginx配置https访问

    1. 前后端代码的部署 首先要完成项目在服务器上面的部署,对于后端服务的部署,只需要把项目打成jar包,然后执行就可以了,对于前端服务,我们把前端打包后的代码放到对应位置,然后配置nginx配置文件, ...

  4. Nginx转发https

    首先看看nginx转发http请求的配置文件: server { listen       80;#代理监听的端口 server_name  localhost;#代理的地址 location / { ...

  5. Vultr云主机+Godaddy域名+阿里SSL配置Nginx的https访问(包含docker配置方法)

    1.centos7安装nginx 网上文档众多,但质量参差不齐,试了不少方法但各自都有各的缺陷,最后直接按照官网的文档完成了. nginx安装官网教程:centos7的Nginx安装 简单来说,就是创 ...

  6. Nginx配置https访问

    在这里我使用的是阿里云ECS,里面提供一年免费SSL证书 1.什么是HTTPS 根据维基百科的解释: 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol ...

  7. nginx配置https访问 生成ssl自签名证书,浏览器直接访问

    问题 nginx配置自签名ssl证书,来支持https访问nginx,在浏览器中访问nginx时,提示有风险.而访问其他各大网站时,也是使用了https协议,为什么可以直接访问,而不提示有风险呢? 解 ...

  8. nginx转发https到http

    微信小程序和公众号,要求外链的页面或API必须使用https.https意味着需要证书,在测试阶段,很不方便,因此部署的测试站点都是http.于是尝试在现有的https站点中,用nginx转发请求到只 ...

  9. nginx转发https:SSL_do_handshake() failed

    大概情况:前端项目是vue,部署到nginx,由于项目中使用了第三方接口,直接访问会存在跨域问题,所以使用nginx进行转发,但是请求的时候报错了. 错误日志 SSL_do_handshake() f ...

最新文章

  1. imp 只导表前10条数据_做电商设计,你必须懂的10条数据指标
  2. 2012-02-25工作记录
  3. 细说 Lambda 表达式
  4. 如何HttpWebRequest模拟登陆,获取服务端返回Cookie以便登录请求后使用
  5. OllyDbg笔记-对标志寄存器中ZF的理解(逆向方面)
  6. 跨年了,来玩儿个Database Crossword Puzzle吧!
  7. 问题 | kali2019.04版中文语言安装后就会乱码
  8. java求出遍历二叉树的路径,102. 二叉树的层序遍历
  9. HDU-4145 A Simple Problem 简单数论
  10. C语言:从键盘输入一些数,求所有正数之和。当输入负数时,程序结束。
  11. 常见的Markdownpad2运行破解以及This view has crashed!报错和Awesomium1.6.6SDK安装使用
  12. vue 多个组件动态加载(动态组件的使用)
  13. 软考笔记0609软件文档三种类别
  14. 常用单片机和开发板的引脚功能图
  15. 「ZJOI2009」多米诺骨牌
  16. ajax提交表单序列化不进请求,表单序列化+ajax跨域提交
  17. 'net' 不是内部或外部命令,也不是可运行的程序 或批处理文件。'net' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  18. z-libirary登录入口_z-libirary在线检测可用检测
  19. 近况(2013-12-16)
  20. 西邮Linux小组22-20纳新面试题目及题解

热门文章

  1. HUAWEI 机试题 :考古学家
  2. 熟知ghost参数 恢复系统没烦恼【xpghost】
  3. Photo Album: Wicresoft
  4. ADuC7026简单开发过程
  5. C++ string CString 详解
  6. 单片机驱动android屏幕,STM32单片机对智能手机触摸屏的驱动
  7. SAP FI 系列 (035) - 应收票据的接收和承兑方法二
  8. js 移动端阻止下拉滑动、刷新
  9. 硬盘分区那点事儿(MBR和GPT)
  10. DOS环境下出现“ ‘javac‘不是内部或外部命令,也不是可运行的程序或皮处理文件 “的报错的解决方法