nginx是用的最多的web服务器
java和python可以写nginx服务,为什么还需要nginx是因为nginx是纯粹的做http实现的服务,并没有业务逻辑,做http代理
1.需要安装nginx
nginx.org
主要涉及nginx的代理和缓存功能
2.配置nginx基础代理
nginx目录下面有一个conf/nginx.cpnf // nginx的配置主文件
通过include servers/*.conf
可以在新建站点的时候,可以单独去建一个配置文件
include是常用的命令帮助导入一些配置
server { // 启动一个服务
listen 80; // 监听80端口
server_name test.com; // 在浏览器里面访问的hostname
location / {
proxy_pass http://127.0.0.1:8888; // 代理到什么地方
proxy_set_header Host $host; // host经过代理之后会被修改
}
}
server {
listen 80;
server_name a.test.com;
location / {
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host;
}
}
$host是变量
https的时候是加密的,所以不能修改
host就去区分我具体访问的是那个服务,中间可能被层层修改
这样一台物理机器可能跑几个服务
http是明文传输,中间都是可以被修改的
3.nginx配置代理和代理缓存的用处
如果都放在一个文件夹里面,随着代理的服务越来越多,查找的速度可能变慢
proxy_cache_path cache levels=1:2 keys_zone=my_cache:10m // 是否创建二级文件夹
设置keys_zone=my_cache:10m,是因为对应的关系要存在内存里面,设置内存的大小,下面的那个设置放在这个内存里面,比如
server {
listen 80;
server_name test.com;
location / {
proxy_cache my_cache;
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host
}
}
响应头里面加上Cache-Control: max-age=20
就可以打开响应
在代理缓存设置之后,如果用户使用过这个代理缓存,即使换一个浏览器,也会使用这个代理缓存,更加高效
代理缓存的缓存设置Cache-Control: max-age=20, s-maxage=20, private
代理缓存会使用s-maxage,浏览器缓存只会使用max-age
private的作用是只有浏览器才能缓存我这部分的数据
Cache-Control: no-store
就是所有地方都不缓存
'Cache-Control':'s-maxage=200',
'Vary':'X-Test-Cache'
只有设置的http头相同的情况下,头里面包括X-Test-Cache
且其值相同的情况下,才会使用缓存
使用场景:PC和移动端使用的数据不同,让他们使用不同的缓存
4.HTTPS
http明文传输,重要信息不要使用http
公钥和私钥
私钥只会放在服务器上,不会放到互联网上传输
https握手过程
5.使用Nginx部署HTTPS服务
需要本地生成密钥,命令去网上查
// 访问http时自动转成https
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name test.com
return 302 https://$server_name$request_uri;
}
server {
listen 80;
server_name test.com;
ssl on;
ssl_certificate_key ../certs/localhost-privkey.pem
ssl-certificate ../certs/localhost-cert.pem
location / {
proxy_cache my_cache;
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host
}
}
6.HTTP2的优势和Nginx配置HTTP2的简单使用
http2的优势
- 信道复用
- 分帧传输
- Server Push // 服务端主动向客户端发送信息
nginx里面开启http2,https才能开启http2
server {
listen 443 http2;
server_name test.com;
http2_push_preload on;
ssl on;
ssl_certificate_key ../certs/localhost-privkey.pem
ssl-certificate ../certs/localhost-cert.pem
location / {
proxy_cache my_cache;
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host
}
}
curl -v url (返回端口连接信息,http请求头部信息,网页html信息)
nginx使用http2还可以自动兼容http1.1
原文地址:http://www.cnblogs.com/oaoa/p/16851920.html