高性能Web容器之Nginx
Nginx与Apache、Tomcat一样都是HTTP服务器,它们的本质仍然是一个应用程序,放在服务端,通过绑定ip:port监听一个端口去接受客户端的HTTP请求。按照动/静态服务器划分,Nginx和Apache属于静态服务器,Tomcat与jetty属于动态服务器。
Nginx配置详
nginx.config配置文件主要有main、event、http等模块构成,我们详细讲述一下关于http的配置
虚拟主机的配置
虚拟主机的配置有三种:基于ip的虚拟主机、基于port的虚拟主机和基于域名的虚拟主机。一般情况下基于port和基于域名的虚拟主机比较常用。
-
基于port的虚拟主机配置
server { listen 80; server_name location; location / { root html; index index.html; } }
-
基于域名的虚拟主机
server{ listen 80; server_name mes.action-prowave.com; location / { root html; index mes.html }
}
```
location配置语法
location [ = | ^~ | ~*] /uri/ {……}
location = /uri(精准匹配,优先级最高)
location ^~ /uri(普通匹配,优先级其次)
location ~ /uri(正则匹配)
location = /
location = /index
location ^~/article
location ^~/article/file
location ~ \.(PNG | GIF)$
实际使用
location = / {
//主页配置
}
location / {
//通用配置
}
location / {
//静态文件配置
}
反向代理
server{
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.0.45:8080;
proxy_set_header Host $host; //host变量
proxy_set_header X-Real -IP $remote_addr;//远程地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;//所有代理服务器的地址
}
}
负载均衡
upsteam tomcat{
server 192.168.0.1 max-fails=2 fail_timeout 60s;(最大失败次数,失败后60s内不再发送请求);
server 192.168.0.2;
}
server{
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcat;
proxy_next_upsteam error timeout http_500;(服务器出现错误的时候向其他服务器发送请求)
proxy_connect_timeout 60s;(nginx与上游服务器的连接超时时间,默认60s)
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
动静分离
```
location ~ .*\.(js|css|png|svg|ico|jpg)${
root static-resource;
}
```
文件压缩
http {
gzip on;
gzip_min_length 5k; //压缩的最小长度,当超过该长度的时候需要进行压缩
gzip_comp_level 3; //压缩等级,级别越高,文件压缩的越小,会带来CPU资源的占用
gzip_types application/javascript image/jpeg //哪些类型的文件需要压缩
gzip_buffers 4 32K; //以32k的4倍去申请内存
gzip_vary on; //根据http头判断是否进行压缩
}
防盗链
location ~ .*\.(js|css|png|svg|ico|jpg)${
valid_referers none blocked 192.168.0.4 www.action-prowave.com;
if ($invalid_referer) {
return 404;
}
root static-resource;
}
跨域访问
location / {
add_header Access-Controller-Allow-Origin *;
add_header Access-Controller-Allow-Methods 'GET,POST,OPTIONS';
add_header Access_Controller-Allow-Header 'Content-type';
}