Nginx配置https和wss

一、使用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://cloud.tencent.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 reload重新加载配置
观察/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 reload (重新加载nginx服务)
netstat -lan | grep 443 (查看443端口)  

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

参考资料

原文地址:https://www.cnblogs.com/xkcp008/p/10161076.html

时间: 2024-08-01 23:15:56

Nginx配置https和wss的相关文章

nginx 配置https并自签名证书

2016-10-28 转载请注明出处:http://daodaoliang.com/ 作者: daodaoliang 版本: V1.0.1 邮箱: [email protected] 参考链接: 这里 和 这里 和 官方文档 1. 制作服务器证书 服务器CA私钥: openssl genrsa -des3 -out ca.key 2048 制作解密后的CA私钥(一般无此必要): openssl rsa -in ca.key -out ca_decrypted.key ca.crt CA根证书(公

Window7 64位下Nginx配置https

一.安装Nginx 官方下载地址:http://nginx.org/en/download.html 直接下载1.7.1.zip的链接:http://nginx.org/download/nginx-1.7.1.zip 二.安装Openssl 官方下载的没弄明白怎么用,不过还是留下链接以备之后使用:http://www.openssl.org/source/ 感觉比较好用的:链接:http://pan.baidu.com/s/1kT9OcPT 密码:zg6p 三.生成密钥 安装完成Openssl

Nginx配置https服务器

配置HTTPS主机,必须在server配置块中打开SSL协议,还需要指定服务器端证书和密钥文件的位置: server { listen 443;  #要加密的域名 server_name www.test.com; ssl on; #证书所在位置,本例默认放在了nginx的conf目录下 ssl_certificate ssl.crt;  #密钥所在位置,本例默认放在了nginx的conf目录下 ssl_certificate_key server.key; ssl_session_timeou

nginx配置https及Android客户端访问自签名证书

前一篇随笔通过keytool生成keystore并为tomcat配置https,这篇随笔记录如何给nginx配置https.如果nginx已配置https,则tomcat就不需要再配置https了.通过以下三步生成自签名证书# 生成一个key,你的私钥,openssl会提示你输入一个密码,可以输入,也可以不输,# 输入的话,以后每次使用这个key的时候都要输入密码,安全起见,还是应该有一个密码保护> openssl genrsa -des3 -out selfsign.key 4096 # 使用

【转】Linux下nginx配置https协议访问的方法

一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/nginx -V 如下所示: configure arguments: --prefix=/usr/local/nginx --with-google_perftools_module --without-http_memcached_module --user=www --group=www --

https(ssl)免费证书申请及nginx配置https(ssl)

首先推荐免费证书的申请url:https://freessl.org/ 然后就是上面证书申请的流程,这里可以参考一篇阿里云里面的博文(我会补充一些细节): https://yq.aliyun.com/articles/225669?spm=5176.10695662.1996646101.searchclickresult.1da01cb9Hyk86J freessl免费证书申请补充: 一.补充一下配置DNS验证的流程,我这里用的是阿里云: 然后点击添加记录 确定 完成,全选,启用一下就可以了:

nginx配置https证书

连接错误,不安全 并不是hsts的锅 chrome://net-internals/#hsts, 大部分原因还是证书的问题 NET::ERR_CERT_COMMON_NAME_INVALID 证书域名和实际访问的域名要匹配:SAN 证书中增加SAN域名 open ssl openssl genrsa -out server.key 1024 openssl req -new -x509 -days 3650 -key server.key -out server.crt -subj "/C=CN

购买https证书以及nginx配置https

文章来源运维公会:购买https证书以及nginx配置https 1.https的作用https的全名是安全超文本传输协议,是在http的基础上增加了ssl加密协议.在信息传输的过程中,信息有可能被劫持,从而造成数据的丢失,而如果使用的是https的话,即使信息被劫持,因为在传输过程中,信息是被加密的,所以也能保证数据的安全性. 2.申请证书目前在阿里云或者腾讯云上都可以购买证书,现在以阿里云为例购买证书在阿里云的产品与服务上找到SSL证书点击购买证书,可以看到有免费型的SSL证书.如果是个人使

关于Nginx配置Https server后,乱跳的问题解决记录

大部分的服务器上,我们会在一个Nginx服务下配置多个vhost,以最大化运用服务器资源.然而,为其中一个vhost域名启用 HTTPS 之后,发现百度统计的实时访客或入口页中,存在一些来自其它域名的请求.即通过 https://some-other-domain.com/some-url 来访问对应的 https://www.domain.com/some-url 结果就是 Google 浏览器显示了一个安全警告页面,认为这是一个不安全的网页.因为我只配置了 www.domain.com 的