经过nginx实现https以及https二级域名转发

经过nginx实现https以及https二级域名转发

发表于2017/6/23 9:06:30  721人阅读html

分类: WEB开发 Nginx前端

/**仅记录本身的学习历程,为之后的本身留一个参考**/node

最近在倒腾微信小程序,研究小程序怎么和服务器通讯,上一篇博客里经过nginx实现了http的二级域名转发,结果发现https实现二级域名转发又是另外一会事,心累啊哭nginx

目的:https://abc.com访问主域名,使用nginx将访问https://shop.abc.com二级域名的请求转发到https://abc.com:3000端口小程序

1.给域名搞个ssl证书微信小程序

我偷懒直接从阿里云申请了一个免费的证书,阿里云的证书服务里面有介绍如何使用证书,惟一要注意就是阿里云的免费证书只能对一个域名有效,即无论你是主域名仍是二级域名都须要单独申请一个ssl证书,不然不能使用https访问。服务器

2.主域名配置nginx微信

找到nginx目录下的nginx.conf文件,进行以下配置,和http服务的配置相似,多添加一个证书服务session

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 

server {tcp

listen 443 ssl;

server_name abc.com;

server_name_in_redirect off;

 

ssl_certificate cert/xxx.pem; #添加证书服务

ssl_certificate_key cert/xxx.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_prefer_server_ciphers on;

location / {

tcp_nodelay on;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

root html;

index index.html index.htm;

}

}

 来自CODE的代码片

https_1.txt

 

3.二级域名配置nginx

https的转发要麻烦一点,由于ssl证书不同,因此不能在主域名的server中进行二级域名转发。找到nginx目录下的nginx.conf文件,在主域名server下面增长一个server

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 

server {

listen 443 ssl;

server_name shop.abc.com;

server_name_in_redirect off;

#能够设置独立的ssl认证

ssl_certificate cert/xxx.pem;

ssl_certificate_key cert/xxx.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_prefer_server_ciphers on;

location / {

tcp_nodelay on;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass http://abc.com:3000;

}

}

 来自CODE的代码片

https_2.txt

对于为何二级域名里面转发的是http地址,我是这么理解的:若是Nginx做为前端代理的话,则后台服务器根本不须要本身处理 https,全是Nginx处理的。用户首先和Nginx创建链接,完成SSL握手,然后Nginx 做为代理以 http 协议将请求转给 后台服务器 处理,Nginx再把后台服务器 的输出经过SSL 加密发回给用户,这中间是透明的,因此后台服务器只是在处理 http 请求而已。所以,这种状况下只须要配置 Nginx 的SSL 和 Proxy。能够参考SSL证书与Https应用部署小结这篇文章

4.重启nginx

/安装路径/sbin/nginx -t 

/安装路径/sbin/nginx -s reload

tips:这是我目前的解决方法,应该还有其它更好的方法,欢迎你们指正。

相关文章
相关标签/搜索