基于Nginx的https服务

博客围绕HTTPS展开,阐述了其实现原因,因HTTP不安全需对传输内容加密和身份验证,介绍了对称与非对称加密及协议原理。还说明了生成密钥和CA证书的步骤,Nginx的HTTPS语法配置,苹果要求证书的配置场景,以及HTTPS服务优化方法。

1、HTTPS协议的实现


1、为什么需要HTTPS?

原因:HTTP不安全

  • 1、传输数据被中间人盗用、信息泄露
  • 2、数据内容劫持、篡改

对传输内容进行加密以及身份验证

2、对称加密

image


非对称加密

image

3、HTTPS加密协议原理

53343562

4、中间人伪造客户端和服务端

53398921

53426000

证书是在客户端的,进行校验。

2、生成密钥和CA证书

#openssl version

OpenSSL 1.0.1e-fips 11 Feb 2013

#nginx-v

-with-http_ssl_module

步骤一、生成key密钥

[root@web-01 ssl_key]# openssl genrsa -idea -out lewen.key 1024
Generating RSA private key, 1024 bit long modulus
......................................++++++
..............................++++++
e is 65537 (0x10001)
Enter pass phrase for lewen.key:                #密码要写.或者不写
Verifying - Enter pass phrase for lewen.key:
View Code

步骤二、生成证书签名请求文件(csr文件)

[root@web-01 ssl_key]# openssl req -new -key lewen.key -out lewen.csr
Enter pass phrase for lewen.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:SZ
Locality Name (eg, city) [Default City]:futian
Organization Name (eg, company) [Default Company Ltd]:fadewalk
Organizational Unit Name (eg, section) []:fadewalk.com
Common Name (eg, your name or your server's hostname) []:fadewalk.com
Email Address []:fadewalk@163.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:        #没有要求就为空
An optional company name []:
[root@web-01 ssl_key]# ls
lewen.csr lewen.key
View Code

步骤三、生成证书签名文件(CA文件)

[root@web-01 ssl_key]# openssl x509 -req -days 3650 -in lewen.csr -signkey lewen.key -out lewen.crt
Signature ok
subject=/C=CN/ST=SZ/L=futian/O=fadewalk/OU=fadewalk.com/CN=fadewalk.com/emailAddress=fadewalk@163.com
Getting Private key
Enter pass phrase for lewen.key:
[root@web-01 ssl_key]# ls
lewen.crt lewen.csr lewen.key
View Code

 


 

3、Nginx的HTTPS语法配置

  
  例子
  server {
        listen              443 ssl;
        keepalive_timeout   70;

        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
        ssl_certificate     /usr/local/nginx/conf/cert.pem;
        ssl_certificate_key /usr/local/nginx/conf/cert.key;
        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 10m;

        ...
    }

[root@web-01 ~]# nginx -s reload

nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /etc/nginx/conf.d/cp4/test_https.conf:4

key设置了密码,每次重启都要输入密码很麻烦

4、场景-配置苹果要求的证书

a、服务器所有的连接使用TLS1.2以上版本(openssl 1.0.2)

b、HTTPS证书必须使用SHA 256以上哈希算法签名

C、HTTPS证书必须使用RSA 2048位或ECC256位以上公钥算法

d、使用前向加密技术

查看证书信息

[root@web-01 ssl_key]# openssl x509 -noout -text -in ./lewen_apple.crt

一键生成证书

[root@web-01 ssl_key]# openssl req -days 3650 -x509 -sha256 -nodes -newkey rsa:2048 -keyout lewen.key -out lewen_apple.crt
Generating a 2048 bit RSA private key
......................................................................................+++
..+++
writing new private key to 'lewen.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:guangdong
Locality Name (eg, city) [Default City]:sz
Organization Name (eg, company) [Default Company Ltd]:fadewlak
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:
[root@web-01 ssl_key]# ls
lewen_apple.crt  lewen.key
View Code

 

nginx 1.15 以后开启ssl的正确姿势

2019/06/17 17:06:54 [warn] 36807#36807: the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /etc/nginx/conf.d/cp4/test_https.conf:4
不推荐使用“ssl”指令,而是在/etc/nginx/conf.d/cp4/test_https中使用“listen ... ssl”指令。CONF:4
ssl on 这种方式开启ssl已经不行了
listen 443 ssl     采用这种

测试网页自己生成的证书,会被提示不安全

d9660f00-78f6-4526-82ec-0fb3d764a307

去掉之前分步生成输入的保护码

openssl rsa -in ./lewen.key -out ./lewen_nopassword.key


5、HTTPS服务优化

方法一、激活keepalive长连接

方法二、设置ssl session缓存

server {
    listen 443 ssl;
    server_name web01.fadewalk.com;
    # ssl on;  nginx 1.15之后这样配置无效

    keepalive_timeout 100;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    ssl_certificate /etc/nginx/ssl_key/lewen_apple.crt;
    ssl_certificate_key /etc/nginx/ssl_key/lewen.key;
    #ssl_certificate_key /etc/nginx/ssl_key/lewen_nopass.key;

    location / {
        root  /opt/app/code/cp4/code;
        index lewen.html lewen.htm;
    }
}



 

转载于:https://www.cnblogs.com/wenyule/p/11068304.html

<think>首先,用户的问题是:“我想搭建基于NginxHTTPS文件服务器 请问如何使用Nginx配置HTTPS协议搭建文件服务器”。这是一个关于配置Nginx作为HTTPS文件服务器的具体问题。 我需要参考系统级指令: - 所有行内数学表达式必须使用$...$格式(但这个问题不涉及数学,所以可能不需要)。 - 独立公式必须使用$$...$$格式并单独成段(同样,可能不适用)。 - LaTeX语法正确(确保任何数学格式正确)。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户可见层: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 - 引用站内引用:用户提供了几个引用,我需要参考这些来回答问题。 用户提供的引用: - [^1]: 关于配置Nginx HTTPS服务器的基本配置。 - [^2]: 讨论Nginx的优点和一些配置。 - [^3]: 关于正向代理HTTPS网站。 - [^4]: 关于FreeSWITCH和Nginx配置HTTPS。 - [^5]: 关于使用Nginx搭建文件下载服务器。 用户的问题是关于搭建HTTPS文件服务器,所以我应该主要参考[^1]和[^5],因为它们直接相关。[^1]是关于HTTPS配置,[^5]是关于文件下载服务器。 关键点: - 用户想搭建文件服务器,所以需要配置Nginx来提供文件下载。 - 需要HTTPS协议,所以必须配置SSL/TLS。 步骤概述(基于我的知识): 1. 获取SSL证书:可以是自签名或从CA获取(如Let's Encrypt)。 2. 配置Nginx:编辑nginx.conf文件,设置server块监听443端口,配置SSL证书路径,并设置文件服务。 3. 启用文件下载:配置location块指向文件目录,设置适当的权限。 4. 可选:重定向HTTP到HTTPS。 5. 重启Nginx服务。 参考用户引用: - 从[^1]:提供了SSL配置的基本模板,包括listen 443 ssl, ssl_certificate, ssl_certificate_key等。 - 从[^5]:关于文件下载服务器的配置,可能包括设置根目录、索引等。 [^5]的引用说:“使用 Nginx 搭建文件下载服务器”,但没有给出具体配置细节,只提供了链接。我需要基于一般知识回答。 用户提供的引用[^5]链接是:https://blog.youkuaiyun.com/u011046671/article/details/132526618,但我不能访问外部链接,所以我只能基于描述。 在回答中,我需要自然地添加引用标识。例如,当提到配置时,添加[^1]。 结构回答: - 介绍:简要说明Nginx配置HTTPS文件服务器的步骤。 - 步骤1:获取SSL证书。 - 步骤2:配置Nginx。 - 步骤3:设置文件服务。 - 步骤4:重启和测试。 - 生成相关问题。 使用中文回答。 生成相关问题:基于主题,如优化、安全、常见问题等。 完整回答框架: 1. 开头:直接回答问题。 2. 逐步指导。 3. 代码块:展示nginx.conf配置示例。 4. 结尾:生成相关问题。 配置示例(基于[^1]和一般知识): - 监听443端口。 - 设置SSL证书。 - 文件服务:设置根目录,禁用索引或允许列表。 - HTTP重定向到HTTPS(可选)。 从[^1]的配置: ``` server { listen 443 ssl; server_name localhost; ssl_certificate /root/Cert.crt; ssl_certificate_key /root/Server.key; # ... other ssl settings } server { listen 80; server_name yourdomain.com; rewrite ^(.*)$ https://$host$1; } ``` 对于文件服务器,添加location: ``` location / { root /path/to/files; autoindex on; # to list files } ``` 在HTTPS server块中。 确保安全:设置正确权限。 最终配置示例: ``` server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /etc/nginx/ssl/cert.crt; ssl_certificate_key /etc/nginx/ssl/private.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:...'; location / { root /var/www/files; autoindex on; # enable directory listing for downloads # or disable if not needed } } server { listen 80; server_name yourdomain.com; return 301 https://$host$request_uri; } ``` 在回答中,解释每个部分。 生成相关问题: 1. 如何生成自签名SSL证书? 2. 如何优化Nginx文件服务器性能? 3. 如何限制文件访问权限? 4. 等等。 引用:当使用引用内容时添加[^1],例如在提到SSL配置时。 回答以中文写。</think>### 使用Nginx配置HTTPS协议搭建文件服务器 要搭建基于NginxHTTPS文件服务器,您需要完成以下步骤:获取SSL证书、配置Nginx以启用HTTPS和文件服务、设置文件目录权限,并测试服务器。下面我将以清晰、逐步的方式指导您完成整个过程。配置基于Nginx的稳定性和高性能特性(如事件驱动的异步处理),确保文件下载高效可靠[^2]。 #### 步骤1: 获取SSL证书 HTTPS服务器需要SSL/TLS证书来加密通信。您可以选择: - **自签名证书**:适合测试环境,使用OpenSSL生成: ```bash openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/server.key -out /etc/nginx/ssl/server.crt ``` 命令会生成证书文件(server.crt)和私钥文件(server.key),存储在`/etc/nginx/ssl/`目录。 - **CA签名证书**:用于生产环境,推荐从Let's Encrypt免费获取(使用Certbot工具自动化申请)。 #### 步骤2: 配置Nginx支持HTTPS和文件服务 编辑Nginx配置文件(通常位于`/etc/nginx/nginx.conf`或`/etc/nginx/sites-available/default`),添加以下内容。配置包括: - 监听443端口启用HTTPS,使用SSL证书。 - 设置文件根目录,启用目录列表(autoindex)以允许文件浏览和下载。 - 可选:添加HTTP到HTTPS的重定向,提升安全性。 ```nginx # HTTPS 文件服务器配置 server { listen 443 ssl; # 监听SSL端口 server_name yourdomain.com; # 替换为您的域名或IP ssl_certificate /etc/nginx/ssl/server.crt; # 证书路径 ssl_certificate_key /etc/nginx/ssl/server.key; # 私钥路径 ssl_protocols TLSv1.2 TLSv1.3; # 推荐使用较新协议[^1] ssl_prefer_server_ciphers on; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384'; # 安全加密套件[^1] ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # 文件服务设置 location / { root /var/www/files; # 文件存储目录,替换为您的路径 autoindex on; # 启用目录列表,显示可下载文件 # 可选:禁用索引,仅允许直接访问文件 # autoindex off; } } # HTTP 重定向到 HTTPS (可选但推荐) server { listen 80; server_name yourdomain.com; # 同上 return 301 https://$host$request_uri; # 永久重定向[^1] } ``` **关键参数说明**: - `ssl_certificate`和`ssl_certificate_key`:指向您的证书和私钥文件路径。 - `root`:设置文件服务器的根目录,例如`/var/www/files`。确保目录存在且有正确权限。 - `autoindex on`:允许用户通过浏览器查看和下载文件列表。如果仅想允许直接文件访问,设为`off`。 - 其他SSL参数(如`ssl_protocols`和`ssl_ciphers`)优化安全性和性能[^1][^2]。 #### 步骤3: 设置文件目录权限 确保文件目录可被Nginx进程访问: ```bash sudo mkdir -p /var/www/files # 创建目录 sudo chown -R www-data:www-data /var/www/files # 设置Nginx用户(通常为www-data)为所有者 sudo chmod 755 /var/www/files # 设置适当权限 ``` 将文件放入此目录(如使用`cp`或FTP),Nginx将自动提供下载服务。 #### 步骤4: 重启Nginx并测试 - 检查配置语法: ```bash sudo nginx -t ``` 如果输出`Syntax OK`,则重启服务: ```bash sudo systemctl restart nginx ``` - 测试文件服务器: - 浏览器访问`https://yourdomain.com`,应显示文件列表(如果autoindex on)。 - 使用命令行工具测试: ```bash curl -k https://yourdomain.com/yourfile.txt # -k忽略自签名证书警告 ``` - 如果遇到问题,检查Nginx错误日志: ```bash tail -f /var/log/nginx/error.log ``` #### 注意事项 - **性能优化**:对于大文件下载,可在`location`块添加`sendfile on;`和`tcp_nopush on;`提升效率[^2]。 - **安全性**:限制访问权限(如添加`allow/deny`规则),或使用`auth_basic`添加密码认证。 - **域名绑定**:如果使用公网IP,需在DNS设置中将域名解析到服务器IP。 - 参考Nginx官方文档或社区资源(如[^5])获取更多文件服务器高级配置。 通过以上步骤,您已成功搭建安全的HTTPS文件服务器。Nginx的高可靠性确保服务长期稳定运行[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值