设为首页 收藏本站
查看: 641|回复: 0

[经验分享] Nginx配置https和wss

[复制链接]
YunVN网友  发表于 2017-12-23 06:14:28 |阅读模式
  微信小程序不仅要求必须是HTTPS和WSS,还要求URL里不能有端口号。

一、使用Nginx足够了
  常见的服务器有三种:


  • Nginx
  • IIS
  • Apache
  这三种服务器都可以配置https,但是没必要全部知道,因为Nginx可以起到反向代理的作用,会配置Nginx就足够了。

二、关于HTTPS协议
  HTTP协议默认端口号是80,HTTPS默认端口号是443。
  
HTTPS协议=HTTP+SSL,而SSL是基于公钥加密算法的。当我们访问一个使用了HTTPS的网站时,这个网站将它的公钥告知浏览器,浏览器在发送请求数据时会使用公钥对数据进行加密,这样一来就不怕有人监听数据包了,因为只有拥有私钥,才能够“理解”这些数据包。
  
对于普通的HTTP数据包,都是未加密的,很容易被监听。比如,当我们连上一个wifi后,我们的一切流量都用从路由器上经过,这个路由器接上抓包软件就能够看到一切,不加密的数据包简直相当于裸奔!所以,不要贪图便宜连接不知来源的wifi,更不要在不信任的wifi下填写密码表单,那样很容易泄露个人信息。而HTTPS协议能够大大解决这个问题。
  对于一个现代化的网站,如果拥有自己的用户,那么就一定有使用HTTPS的必要。要全网站都是用HTTPS而不是部分链接使用HTTPS,因为访问HTTP链接的时候携带着跟访问HTTPS链接时一模一样的cookie,这就有可能泄露sessionId,而泄露sessionID跟泄露密码差不太多。
  HTTPS并非百利而无一害,它对服务器性能提出了更高的要求。因为加密、解密的过程也是一个不可忽略的性能消耗。

三、获取SSL证书
  获取SSL证书,最简单、最正确的姿势是使用腾讯云,申请SSL,这个过程是免费的,并且不需要任何命令行。
  
链接如下:
  
https://www.qcloud.com/product/ssl
  如果不想了解更多关于证书的内容,可以跳过下面。

证书结构
  配置一个HTTPS服务所需要的证书包括几个部分:


  • Server Key(服务器私钥)
  • CSR(Certificate Signing Request)
  • CRT(X509 Certificate)
  创建证书的基本流程是这样:


  • 生成自己的服务端私钥
  • 输入基本信息并用私钥签名生成CSR
  • 提交CSR给证书机构CA(免费或商业证书)签名生成CRT,或自己做CA签名生成CRT(自签名证书)。自签名证书和证书机构签名生成证书前两个步骤都是一样的,在这里统一说明一下。
自己生成证书(即公私钥)
  自己生成证书最大的坏处就是,访问此网站时,浏览器会提示证书不受信任。
  

# 1、首先,进入你想创建证书和私钥的目录,例如:  
cd /etc/nginx/
  

  
# 2、创建服务器私钥,命令会让你输入一个口令:
  
openssl genrsa -des3 -out server.key 1024
  
这句话生成server.key,这个文件长度为1024字节,这就是私钥,是服务器用来解码用户请求的宝贝。
  

  
# 3、创建签名请求的证书(CSR):
  
openssl req -new -key server.key -out server.csr
  

  
# 4、在加载SSL支持的Nginx并使用上述私钥时除去必须的口令:
  
cp server.key server.key.org
  
openssl rsa -in server.key.org -out server.key
  

  

  
# 5、最后标记证书使用上述私钥和CSR:
  
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.c
  

  第3个命令是生成证书请求,会提示输入省份、城市、域名信息等,重要的是,email一定要是你的域名后缀的。这样就有一个 csr 文件了,提交给 ssl 提供商的时候就是这个 csr 文件。当然我这里并没有向证书提供商申请,而是在第4步自己签发了证书。

四、配置Nginx
  在/etc/nginx/conf.d目录下新建https.conf
  

upstream websocket{  server weiyinfu.cn:8080;
  
}
  
upstream web{
  server weiyinfu.cn:8080;
  
}
  
server {
  listen       443;
  server_name  weiyinfu.cn;
  

  ssl                  on;
  ssl_certificate      /etc/nginx/weiyinfu.cn/Nginx/1_weiyinfu.cn_bundle.crt;
  ssl_certificate_key  /etc/nginx/weiyinfu.cn/Nginx/2_weiyinfu.cn.key;
  

  ssl_session_timeout  5m;
  ssl_session_cache shared:SSL:50m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2  SSLv2 SSLv3;
  ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
  ssl_prefer_server_ciphers   on;
  

  location /wss {
  access_log /var/log/nginx/come-websocket.log;
  proxy_pass http://websocket/; # 代理到上面的地址去
  proxy_read_timeout 60s;
  proxy_set_header Host $host;
  proxy_set_header X-Real_IP $remote_addr;
  proxy_set_header X-Forwarded-for $remote_addr;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection 'Upgrade';
  }
  

  location / {
  #root   html;
  #index  testssl.html index.html index.htm;
  access_log      /var/log/nginx/https-reverse.log;
  proxy_redirect off;
  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://weiyinfu.cn/;
  }
  
}
  

  此文件包含两部分,第一部分配置wss,第二部分配置https

五、将http重定向到https
  

server {  listen  192.168.1.111:80;  
  server_name test.com;  
  rewrite ^(.*)$  https://$host$1 permanent;  
  
}  
  

  

  举例:将访问目录 \services 由http访问 重定向到 https (解决方法:nginx rewrite 加上 location 方式实现)
  

location ~ /services/.*$ {  if ($server_port ~ "^80$"){
  set $rule_0 1$rule_0;
  }
  if ($rule_0 = "1"){
  rewrite /(.*) https://IP地址/$1 permanent;                       break;
  }
  }
  

六、验证是否配置成功
  nginx -t 命令测试一下

  
service nginx>  
观察/var/log/nginx查看日志
  

/usr/local/nginx/sbin/nginx -t  
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok  
  
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful (显示表示配置文件没有错误)
  


  
service nginx>  
netstat -lan | grep 443 (查看443端口)  
  

  tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN (有看到这一行 就表示HTTPS已经在工作了)

参考资料
  官网文档http://nginx.org/en/docs/http/websocket.htm
  
http://www.wxapp-union.com/portal.php?mod=view&aid=2105
  
http://www.cnblogs.com/yun007/p/3739182.html
  
关于HTTPS详尽的介绍

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-427030-1-1.html 上篇帖子: Nginx优化指南+LINUX内核优化+linux连接数优化+nginx连接数优化 下篇帖子: Ubuntu16.04安装Nginx+PHP5.6+MySQL5.6
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表