超文本传输协议(HTTP)是用于传输诸如HTML的超媒体文档的应用层协议。javascript
它被设计用于Web浏览器和Web服务器之间的通讯,但它也能够用于其余目的。 HTTP遵循经典的客户端-服务端模型,客户端打开一个链接以发出请求,而后等待它收到服务器端响应。 HTTP是无状态协议,意味着服务器不会在两个请求之间保留任何数据(状态)。该协议虽然一般基于TCP / IP层,但能够在任何可靠的传输层上使用;也就是说,一个不会像UDP协议那样静默丢失消息的协议。RUDP做为UDP的可靠的升级版本,是一种合适的替代选择。php
超文本传输安全协议(HyperText Transfer Protocol Secure,缩写:HTTPS;常称为HTTP over TLS、HTTP over SSL或HTTP Secure)是一种经过计算机网络进行安全通讯的传输协议。css
HTTPS经由HTTP进行通讯,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上。html
历史上,HTTPS链接常常用于万维网上的交易支付和企业信息系统中敏感信息的传输。在2000年代末至2010年代初,HTTPS开始普遍使用,以确保各种型的网页真实,保护帐户和保持用户通讯,身份和网络浏览的私密性。vue
另外,还有一种安全超文本传输协议(S-HTTP)的HTTP安全传输实现,可是HTTPS的普遍应用而成为事实上的HTTP安全传输实现,S-HTTP并无获得普遍支持。java
HTTPS的主要做用是在不安全的网络上建立一个安全信道,并可在使用适当的加密包和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供合理的防御。node
HTTPS的信任基于预先安装在操做系统中的证书颁发机构(CA)。所以,到一个网站的HTTPS链接仅在这些状况下可被信任:nginx
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,若是攻击者截取了Web浏览器和网站服务器之间的传输报文,就能够直接读懂其中的信息,所以HTTP协议不适合传输一些敏感信息,好比信用卡号、密码等。 为了解决HTTP协议的这一缺陷,须要使用另外一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通讯加密。 HTTPS和HTTP的区别主要为如下四点:git
HTTP 在传输层之上,是依靠于 TCP 链接的。也就是说先创建起 TCP 链接,创建好链接以后双方之间才能传输数据。也就是说,想按照规定的格式传输数据,就须要先创建 TCP 链接。那 TCP 链接是怎么创建起来的呢。github
TCP 链接的三次握手:
向对方发送一个创建链接的请求。咱们在浏览器上输入了要访问的网站地址以后,浏览器会向 DNS 服务器请求这个域名对应的 IP 地址,拿到 IP 地址就至关于知道了对方的位置。咱们就能够向他发送一个创建链接的请求,同时本身也作好了要创建链接的「准备」。
回复客户端的请求。对方机器一直在等待着其余人跟本身创建链接,等啊等,忽然收到了你要创建链接的请求,兴奋不已,马上回复你,说:我收到了你要创建链接的请求啦,我也准备好要创建链接啦。
你收到这个消息以后必定要回复它,说:好的,我知道你也作好了创建链接的准备啦,我们开始发送数据吧。
为何必定要回复他呢,由于他不肯定你是否收到了他的确认请求,若是你不回复,他会觉得你这个创建请求的消息是假的,是过时了的,就不会创建链接。当他收到你的回复以后,就明确的知道了你确实要创建链接,也知道了你准备好了链接的创建,再以后就能够按照 HTTP 的格式传输数据了。在这个过程当中的第三步时,就是你发送确认消息的那个数据包中,能够将须要传输的数据一并塞进去的。在重复一次,你先发一个创建链接的请求,他接收后回复一个收到,创建吧,你收到他的回复,在向他回复一个知道啦。这时,大家之间 TCP 链接就已经创建好了。接下来,你就能够按照 HTTP 向他发送请求,好比说要某一个图片,他收到请求后就会给你发过来一个图片,固然,大家之间是明文传输的。
那 HTTPS 是如何创建链接的呢,怎么商量好加密密码的呢?HTTPS 同 HTTP 同样,首先创建起 TCP 链接,可是创建好以后并非当即发出请求,索要具体的资源,而是先和对方商量加密的密码。商量的加密密码的过程就是创建 TSL 链接的过程。其实并无创建真实的链接,只是在刚刚创建好的 TCP 链接上,包裹上一层加密协议而已。可是也被形象的称做链接创建。
具体创建方式以下:
个人nginx版本是:nginx version: nginx/1.10.3 (Ubuntu)
个人nginx目录结构,nginx安装
feihong@iZuf69ng9hibpqjrdkb660Z:/etc/nginx$ ls
cert fastcgi_params mime.types scgi_params snippets
conf.d koi-utf nginx.conf sites-available uwsgi_params
fastcgi.conf koi-win proxy_params sites-enabled win-utf
复制代码
个人服务器是阿里云的,那就从阿里云的云盾中得到SSL证书
点击购买证书
选择免费型DV SSL
点击当即购买
返回控制台能够看见一个未签发的证书,申请签发
填写申请和验证信息(申请经过要等一会时间)
经过后,证书已签发
下载证书
两个证书分别是*.pem和*.key
打开两个证书后,发现里面都是密钥
*.key: 证书的私钥文件
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAi1M5kieXbIDTCJwyWWif8g/JCEpwOv2m2nyHPa32j4GtQgAV
2Vc7osTG/rx2UFkmin2RWT8Lb13UQe3vKEvZi0HcXH1ef8MVymyR/M1H8+D9mQ5q
……
rtClNTkCgYB18MoPDYFFp8lcMFL4joIcmQTgRlZN7ZYwj0TEa+e2UemqkrxN8XyO
P5xniOvmacFt3SxoDLjQoVOmmS1B0QdXP24y+b1+vIfG8ZQ3grNU0Nq2PyXRe7TR
CaGaIY+5DXwoPjzPvfbWKIuMwthyAeyddW4XzO9/9c2Ugrr0s6AWkQ==
-----END RSA PRIVATE KEY-----
~
复制代码
*.pem:是证书文件
-----BEGIN CERTIFICATE-----
MIIFnTCCBIWgAwIBAgIQBLNEzXnEO46h+mG3ixM+AzANBgkqhkiG9w0BAQsFADBu
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
……
1/MtB1NyBlHxBrJQJVKxOLiS/4rzjV3UsQvOz5maM5gBzd3/NPIIU/gBIeK4vgSk
1w==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
……
sNE2DpRVMnL8J6xBRdjmOsC3N6cQuKuRXbzByVBjCqAA8t1L0I+9wXJerLPyErjy
rMKWaBFLmfK/AHNF4ZihwPGOc7w6UHczBZXH5RFzJNnww+WnKuTPI0HfnVH8lg==
复制代码
登陆阿里云,找到安全组,添加规则,给443端口开放对外访问权限(不要像我是的,最后出现问题的根源就是这个)。
在/etc/nginx/cert/
中放置下载来的两个证书文件
从nginx.conf中咱们能够发现其导入了/etc/nginx/conf.d/*.conf
和/etc/nginx/sites-enabled/*
这说明须要在这两处将server写进去,固然分开最好,避免耦合
在/etc/nginx/conf.d/
文件夹中的default.conf文件,就是写一些http的服务
在/etc/nginx/sites-enabled/
的文件夹下写一些https的服务
# nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
复制代码
在sites-available中添加qiufeihong.top文件
ssl_certificate和ssl_certificate_key将两个证书文件导入
前者服务是https
后者是http,重定向会https
# qiufeihong.top
server {
listen 443 ssl;
server_name www.qiufeihong.top;
ssl on;
ssl_certificate /etc/nginx/cert/2476067_www.qiufeihong.top.pem;
ssl_certificate_key /etc/nginx/cert/2476067_www.qiufeihong.top.key;
ssl_session_timeout 10m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:7777;
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_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
}
}
server {
listen 80;
server_name www.qiufeihong.top;
rewrite ^(.*)$ https://$host$1 permanent;
}
复制代码
而且,须要将conf.d
文件夹中的default.conf
中的关于博客的配置的代码将其删除,不然nginx重启配置时,会报两个同名服务的错误。
server
{
listen 80;
server_name www.qiufeihong.top;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:7777;
}
}
复制代码
创建软连接
sudo ln sites-available/qiufeihong.top sites-enabled/qiufeihong.top
复制代码
在sites-enabled中就能看到qiufeihong.top
sudo nginx -t
sudo nginx -s reload
复制代码
登陆网站出现了一把关闭的锁
最后,别忘了给这个项目点一个star哦,谢谢支持。
一个学习编程技术的公众号。天天推送高质量的优秀博文、开源项目、实用工具、面试技巧、编程学习资源等等。目标是作到我的技术与公众号一块儿成长。欢迎你们关注,一块儿进步,走向全栈大佬的修炼之路