nginx搭建https服务器

本文深入探讨了HTTPS协议的基本概念及其与SSL证书之间的关系,包括如何生成自签名证书、配置HTTPS虚拟主机以及优化SSL服务的方法。重点介绍了SSL证书的作用、生成过程、内网实现加密传输的简便方式,并提供了搭建HTTPS虚拟主机的详细步骤与配置示例。

HTTPS简介

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单来讲就是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
它是一个URI scheme(抽象标识符体系),句法类同http:体系,用于安全的http数据传输。https使用的默认端口是443.

ssl证书

证书类型简介

要设置安全服务器,使用公共钥创建一对公私钥对。大多数情况下,发送证书请求(包括自己的公钥),你的公司证明材料以及费用到一个证书颁发机构(CA).CA验证证书请求及您的身份,然后将证书返回给您的安全服务器。

但是内网实现一个服务器端和客户端传输内容的加密,可以自己给自己颁发证书,只需要忽略掉浏览器不信任的警报即可!

由CA签署的证书为您的服务器提供两个重要的功能:
  • 浏览器会自动识别证书并且在不提示用户的情况下允许创建一个安全连接
  • 当一个CA生成一个签署过的证书,它为提供网页给浏览器的组织提供身份担保。
  • 多数支持ssl的web服务器都有一个CA列表,它们的证书会被自动接受。当一个浏览器遇到一个其授权CA并不在列表中的证书,浏览器将询问用户是否接受或拒绝连接

生成ssl证书

Html代码   收藏代码
  1. openssl genrsa -des3 -out wangzhengyi.key 2048  



Html代码   收藏代码
  1. openssl req -new -key wangzhengyi.key -out wangzhengyi.csr  



创建一个自己签署的CA证书

Html代码   收藏代码
  1. openssl req -new -x509 -days 3650 -key wangzhengyi_nopass.key -out wangzhengyi.crt  



搭建https虚拟主机

虚拟主机配置文件

Html代码   收藏代码
  1. upstream sslfpm {  
  2.     server 127.0.0.1:9000   weight=10   max_fails=3 fail_timeout=20s;  
  3. }  
  4.   
  5. server {   
  6.     listen       192.168.1.*:443;   
  7.     server_name  192.168.1.*;   
  8.       
  9.     #为一个server开启ssl支持  
  10.     ssl                  on;  
  11.     #为虚拟主机指定pem格式的证书文件  
  12.     ssl_certificate      /home/wangzhengyi/ssl/wangzhengyi.crt;   
  13.     #为虚拟主机指定私钥文件  
  14.     ssl_certificate_key  /home/wangzhengyi/ssl/wangzhengyi_nopass.key;   
  15.     #客户端能够重复使用存储在缓存中的会话参数时间  
  16.     ssl_session_timeout  5m;  
  17.     #指定使用的ssl协议   
  18.     ssl_protocols  SSLv3 TLSv1;   
  19.     #指定许可的密码描述  
  20.     ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;   
  21.     #SSLv3和TLSv1协议的服务器密码需求优先级高于客户端密码  
  22.     ssl_prefer_server_ciphers   on;   
  23.   
  24.     location / {   
  25.         root   /home/wangzhengyi/ssl/;  
  26.         autoindex on;  
  27.             autoindex_exact_size    off;  
  28.             autoindex_localtime on;  
  29.     }   
  30.         # redirect server error pages to the static page /50x.html  
  31.         #  
  32.         error_page   500 502 503 504  /50x.html;  
  33.         error_page   404 /404.html;  
  34.   
  35.     location = /50x.html {  
  36.             root   /usr/share/nginx/www;  
  37.         }  
  38.     location = /404.html {  
  39.             root   /usr/share/nginx/www;  
  40.         }  
  41.       
  42.         # proxy the PHP scripts to fpm  
  43.         location ~ \.php$ {  
  44.         access_log  /var/log/nginx/ssl/ssl.access.log  main;  
  45.         error_log /var/log/nginx/ssl/ssl.error.log;  
  46.         root /home/wangzhengyi/ssl/;   
  47.         fastcgi_param   HTTPS   on;  
  48.             include /etc/nginx/fastcgi_params;    
  49.             fastcgi_pass    sslfpm;  
  50.         }  
  51. }  

HTTPS服务器优化

方法
SSL操作需要消耗CPU资源,所以在多处理器的系统,需要启动多个工作进程,而且数量需要不少于可用CPU的个数。最消耗CPU资源的SSL操作是SSL握手,有两种方法可以将每个客户端的握手操作数量降到最低:
  1. 保持客户端长连接,在一个SSL连接发送多个请求
  2. 在并发的连接或者后续的连接中重用SSL会话参数,这样可以避免SSL握手操作。

会话缓存用于保存SSL会话,这些缓存在工作进程间共享,可以使用 ssl_session_cache指令进行配置。1M缓存可以存放约4000个会话。默认的缓存超时时间是5m,可以使用ssl_session_timeout加大它。

ssl_session_cache指令
Html代码   收藏代码
  1. 语法:ssl_session_cache off|none|builtin:size|shared:name:size  
  2. 使用环境:main,server  
  3. 缓存类型:  
  4. off -- 硬关闭,nginx明确告诉客户端这个会话不可重用  
  5. none -- 软关闭,nginx告诉客户端会话能够被重用,但是nginx实际上不会重用它们  
  6. bultin -- openssl内置缓存,仅可用于一个工作进程.可能导致内存碎片  
  7. shared -- 所有工作进程的共享缓存。(1)缓存大小用字节数指定(2)每个缓存必须拥有自己的名称(3)同名的缓存可用于多个虚拟主机  

优化示例
Html代码   收藏代码
  1. #优化ssl服务  
  2. ssl_session_cache   shared:wzy:10m;   
  3. #客户端能够重复使用存储在缓存中的会话参数时间  
  4. ssl_session_timeout  10m;  


参考链接

http://nginx.org/cn/docs/http/configuring_https_servers.html
<think>好的,用户想搭建HTTPS服务器,使用Nginx和OpenSSL生成密钥和证书,并配置nginx.conf的SSL设置。我需要根据提供的引用资料和之前的经验来整理步骤。 首先,生成密钥和证书。OpenSSL通常用于生成自签名证书,虽然自签名证书不被浏览器信任,但适合测试环境。用户可能需要先生成私钥和证书请求(CSR),然后自签名。不过引用中提到的例子好像直接生成crt和key,比如引用1中的server.crt和server.key,以及引用2中的server.pem和server.key。可能用户需要生成RSA密钥对,然后创建自签名证书。命令可能包括openssl req和openssl x509,但需要确认正确的参数,比如-newkey rsa:2048,-nodes,-keyout,-out,-days等。注意自签名证书需要-subj选项来指定主题,避免交互式输入。 接下来是配置Nginx。用户需要编辑nginx.conf,在server块中设置监听443端口,ssl_certificate和ssl_certificate_key指向生成的证书和密钥路径。引用1和引用2中的配置示例显示,server块里必须包含listen 443 ssl,然后指定证书和key的路径。此外,可能还需要配置SSL协议版本、加密套件,如ssl_protocols和ssl_ciphers,引用2中有相关例子,可能需要建议用户使用更安全的配置,比如TLS 1.2以上,禁用不安全的加密套件。同时,可能需要配置其他SSL参数,如ssl_session_timeout和ssl_prefer_server_ciphers on。 另外,用户可能需要设置静态资源路径或反向代理,如引用1中的alias html/和autoindex on;,或者引用2中的proxy_pass。这部分需要根据用户的实际需求来调整,但用户当前问题可能主要集中在SSL配置,所以这部分可以简要提及。 还需要注意权限问题,确保Nginx有权限读取证书和密钥文件。如果用户在Linux系统下,可能需要调整文件权限,比如chmod 600 server.key。 测试配置是否正确,使用nginx -t检查语法,然后重启Nginx服务。最后验证HTTPS是否生效,可以通过curl -k或浏览器访问,虽然自签名证书会有警告,但连接应成功。 可能遇到的问题包括:证书路径错误,权限问题,端口443未开放,Nginx未编译SSL模块等。需要提醒用户检查这些点。 总结步骤应该是:生成证书和密钥 → 配置Nginx SSL → 检查配置 → 重启服务 → 测试访问。需要确保每个步骤的命令和配置示例准确,特别是路径部分要用户根据实际情况修改。同时,注意中文回答,使用正确的LaTeX格式,但问题中可能数学公式不多,主要是在代码块和路径说明中注意格式。</think>### 分步指南:使用Nginx和OpenSSL搭建HTTPS服务器 #### 一、生成密钥和证书文件 1. **创建私钥和自签名证书** 通过OpenSSL生成RSA私钥和自签名证书(测试用途): ```bash openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout server.key -out server.crt \ -subj "/C=CN/ST=Beijing/L=Beijing/O=Dev/CN=localhost" ``` - `-nodes`:私钥不加密,避免Nginx启动时需要输入密码 - `-subj`:指定证书主题信息,可自定义国家(C)、省份(ST)、组织(O)等[^1] 2. **验证生成文件** 检查当前目录下是否生成 `server.key`(私钥)和 `server.crt`(证书)文件。 #### 二、配置Nginx的SSL设置 1. **编辑nginx.conf文件** 在Nginx配置文件中添加以下内容: ```nginx server { listen 443 ssl; server_name localhost; # 域名或IP ssl_certificate /path/to/server.crt; # 证书绝对路径 ssl_certificate_key /path/to/server.key; # 私钥绝对路径 # 增强SSL安全性 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers on; location / { root html; index index.html; autoindex on; # 开启目录列表(可选) } } ``` 2. **强制HTTP跳转HTTPS(可选)** 添加HTTP到HTTPS的重定向: ```nginx server { listen 80; server_name localhost; return 301 https://$server_name$request_uri; } ``` #### 三、验证与重启服务 1. **检查配置文件语法** ```bash nginx -t ``` 输出应为 `syntax is ok` 和 `test is successful`。 2. **重启Nginx服务** ```bash nginx -s reload ``` 3. **测试HTTPS访问** 使用浏览器访问 `https://localhost`,忽略证书警告后应显示Nginx默认页面。 #### 四、常见问题处理 - **权限问题**:确保Nginx进程有权限读取 `server.key` 和 `server.crt` 文件(建议设置 `chmod 400 server.key`)。 - **端口冲突**:检查443端口是否被占用(`netstat -tuln | grep 443`)。 - **证书路径错误**:使用绝对路径而非相对路径[^2]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值