Nginx转发https访问的实现
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访问的实现相关推荐
- Nginx转发https请求访问http后端接口
Nginx转发https请求 问题描述 前后端分离项目,前端使用Nginx部署,后端是Spring Boot项目,使用tomcat部署. Nginx配置了SSL,并且前端项目需要https协议访问.后 ...
- windows 上配置 nginx 转发 https
windows 上配置 nginx 转发 https 1.需求分析 2.前提条件 3.生成证书 3.1.软件 3.2.申请证书 4.修改配置 1.需求分析 工作环境中,使用云桌面(win10)进行开发 ...
- 如何部署微信小程序,并且利用Nginx配置https访问
1. 前后端代码的部署 首先要完成项目在服务器上面的部署,对于后端服务的部署,只需要把项目打成jar包,然后执行就可以了,对于前端服务,我们把前端打包后的代码放到对应位置,然后配置nginx配置文件, ...
- Nginx转发https
首先看看nginx转发http请求的配置文件: server { listen 80;#代理监听的端口 server_name localhost;#代理的地址 location / { ...
- Vultr云主机+Godaddy域名+阿里SSL配置Nginx的https访问(包含docker配置方法)
1.centos7安装nginx 网上文档众多,但质量参差不齐,试了不少方法但各自都有各的缺陷,最后直接按照官网的文档完成了. nginx安装官网教程:centos7的Nginx安装 简单来说,就是创 ...
- Nginx配置https访问
在这里我使用的是阿里云ECS,里面提供一年免费SSL证书 1.什么是HTTPS 根据维基百科的解释: 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol ...
- nginx配置https访问 生成ssl自签名证书,浏览器直接访问
问题 nginx配置自签名ssl证书,来支持https访问nginx,在浏览器中访问nginx时,提示有风险.而访问其他各大网站时,也是使用了https协议,为什么可以直接访问,而不提示有风险呢? 解 ...
- nginx转发https到http
微信小程序和公众号,要求外链的页面或API必须使用https.https意味着需要证书,在测试阶段,很不方便,因此部署的测试站点都是http.于是尝试在现有的https站点中,用nginx转发请求到只 ...
- nginx转发https:SSL_do_handshake() failed
大概情况:前端项目是vue,部署到nginx,由于项目中使用了第三方接口,直接访问会存在跨域问题,所以使用nginx进行转发,但是请求的时候报错了. 错误日志 SSL_do_handshake() f ...
最新文章
- imp 只导表前10条数据_做电商设计,你必须懂的10条数据指标
- 2012-02-25工作记录
- 细说 Lambda 表达式
- 如何HttpWebRequest模拟登陆,获取服务端返回Cookie以便登录请求后使用
- OllyDbg笔记-对标志寄存器中ZF的理解(逆向方面)
- 跨年了,来玩儿个Database Crossword Puzzle吧!
- 问题 | kali2019.04版中文语言安装后就会乱码
- java求出遍历二叉树的路径,102. 二叉树的层序遍历
- HDU-4145 A Simple Problem 简单数论
- C语言:从键盘输入一些数,求所有正数之和。当输入负数时,程序结束。
- 常见的Markdownpad2运行破解以及This view has crashed!报错和Awesomium1.6.6SDK安装使用
- vue 多个组件动态加载(动态组件的使用)
- 软考笔记0609软件文档三种类别
- 常用单片机和开发板的引脚功能图
- 「ZJOI2009」多米诺骨牌
- ajax提交表单序列化不进请求,表单序列化+ajax跨域提交
- 'net' 不是内部或外部命令,也不是可运行的程序 或批处理文件。'net' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
- z-libirary登录入口_z-libirary在线检测可用检测
- 近况(2013-12-16)
- 西邮Linux小组22-20纳新面试题目及题解
热门文章
- HUAWEI 机试题 :考古学家
- 熟知ghost参数 恢复系统没烦恼【xpghost】
- Photo Album: Wicresoft
- ADuC7026简单开发过程
- C++ string CString 详解
- 单片机驱动android屏幕,STM32单片机对智能手机触摸屏的驱动
- SAP FI 系列 (035) - 应收票据的接收和承兑方法二
- js 移动端阻止下拉滑动、刷新
- 硬盘分区那点事儿(MBR和GPT)
- DOS环境下出现“ ‘javac‘不是内部或外部命令,也不是可运行的程序或皮处理文件 “的报错的解决方法