赞
踩
关于 Web 服务器的安全是比较大的一个话题,里面所涉及的内容很多,Nginx 反向代理是如何来提升 Web 服务器的安全呢?这里就要说一下安全隔离
的概念了。
通过代理分开了客户端到应用程序服务器端的连接,实现了安全措施。在反向代理之前设置防火墙,仅留一个入口供代理服务器访问,这就是安全隔离。
通俗来说就是将我们常用的 http 请求转变成 https 请求,那么这两个之间的区别简单的来说两个都是 http 协议,只不过 https 是身披 SSL 外壳的 http。
https 是一种通过计算机网络进行安全通信的传输协议。它经由 http 进行通信,利用 SSL/TLS 建立全通信,加密数据包,确保数据的安全性。
上述这两个是为网络通信提供安全及数据完整性的一种安全协议,TLS 和 SSL 在传输层和应用层对网络连接进行加密。
总结来说为什么要使用 https:
http协议是明文传输数据,存在安全问题,而https是加密传输,相当于http+ssl,并且可以防止流量劫持。
Nginx 要想使用 SSL,需要满足一个条件即需要添加一个模块--with-http_ssl_module
,而该模块在编译的过程中需要 OpenSSL 的支持。
完成--with-http_ssl_module
模块的增量添加:
/usr/local/nginx/sbin/nginx
进行备份;./configure --with-http_ssl_module
;make
模板进行编译;objs
下面的nginx
移动到/usr/local/nginx/sbin
下;make upgrade
进行升级,这个可以实现不停机添加新模块的功能。ssl:该指令用来在指定的服务器开启HTTPS,可以使用 listen 443 ssl,后面这种方式更通用些。
语法 | ssl on | off; |
---|---|
默认值 | ssl off; |
位置 | http、server |
server{
listen 443 ssl;
}
ssl_certificate:为当前这个虚拟主机指定一个带有PEM格式证书的证书。
语法 | ssl_certificate file; |
---|---|
默认值 | - |
位置 | http、server |
ssl_certificate_key:该指令用来指定PEM secret key文件的路径。
语法 | ssl_ceritificate_key file; |
---|---|
默认值 | - |
位置 | http、server |
ssl_session_cache:该指令用来配置用于SSL会话的缓存。
语法 | ssl_sesion_cache off|none|[builtin[:size]] [shared:name:size] |
---|---|
默认值 | ssl_session_cache none; |
位置 | http、server |
ssl_session_timeout:开启SSL会话功能后,设置客户端能够反复使用储存在缓存中的会话参数时间。
语法 | ssl_session_timeout time; |
---|---|
默认值 | ssl_session_timeout 5m; |
位置 | http、server |
ssl_ciphers:指出允许的密码,密码指定为OpenSSL支持的格式。
语法 | ssl_ciphers ciphers; |
---|---|
默认值 | ssl_ciphers HIGH:!aNULL:!MD5; |
位置 | http、server |
ssl_prefer_server_ciphers:该指令指定是否服务器密码优先客户端密码。
语法 | ssl_perfer_server_ciphers on|off; |
---|---|
默认值 | ssl_perfer_server_ciphers off; |
位置 | http、server |
使用openssl version
命令确定当前系统是否安装 openssl。
按照下面的步骤进行生成:
mkdir /root/cert
cd /root/cert
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
server {
# 服务器端口使用443,开启ssl
listen 443 ssl;
# 域名,多个以空格分开
server_name localhost;
# ssl证书地址
ssl_certificate server.cert;
ssl_certificate_key server.key; # key文件的路径
# ssl验证相关配置
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m; # 缓存有效期
ssl_ciphers HIGH:!aNULL:!MD5; # 加密算法
ssl_prefer_server_ciphers on; # 使用服务器端的首选算法
location / {
root html;
index index.html index.htm;
}
}
将 http 重定向 https:
server {
listen 80;
server_name your-domain.com; # 你的域名
rewrite ^(.*)$ https://your-domain.com$1; # 把http的域名请求转成https
}
【1】https://www.bilibili.com/video/BV1ov41187bq?p=91&vd_source=e66fcf471e44c7ac45f918fd1f1e7a77
【2】https://blog.csdn.net/weixin_44060108/article/details/121245182
【3】https://blog.csdn.net/weixin_38615720/article/details/92827012?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-92827012-blog-123139998.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-92827012-blog-123139998.pc_relevant_antiscanv2&utm_relevant_index=2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。