nginx 配置笔记
nginx 作为高性能代理工具,在建站的时经常需要修改和调整配置,现在整理一下配置方法。
evens
evens 用于配置 nginx 的工作模式,可以使用 io 多路复用的网络模型。
evens {
use epoll; # epoll 模型是指 linux 提供的高性能网络 io 模型,如果是 freeBSD 内使用 kqueue 模型。
worker_connections: 66535; # 每个进程的最大连接数。
}
http 服务器配置
http {
include mime.types; # 文件的扩展名与类型的映射表
default_type application/octet-stream; # 默认文件类型
charset utf-8; # 默认的编码格式
server_names_hash_bucket_size 128; # 服务器名称的哈希表大小
client_header_buffer_size 32k; # 上传文件的大小限制
sendfile on; # 是否开启高效的文件传输模式,但是如果本身是文件类型的服务,反而会加重系统的负载,所以需要设置为off
tcp_nopush on;
tcp_nodealy on; # 防止网络阻塞
# nginx要解析php脚本,就必须配置fastcgi模块, 其中的fastcgi参数 ,用来提升性能
fastcgi_connect_timeout 300; # 指定nginx与后端fastcgi server连接超时时间
fastcgi_send_timeout 60s; # nginx传输给fastcgi server的超时时间
fastcgi_read_timeout 60s; # nginx读取fastcgi server返回值的超时时间
fastcgi_buffer_size 64k; # 响应第一部分应答需要多大的缓存区大小(也就是答应头)
fastcgi_buffers 4 64k; # 需要多大的缓冲区来缓冲 fastcgi server的应答数据,如果页面信息超过256kb,就是用fastcgi_temp指定的路由来承接多余的数据
# 压缩设置
gzip on; # 开启gzip压缩输出
gzip_min_lenght 1k; # 当数据量小于1k的时候,不进行压缩
gzip_http_version 1.1; #压缩版本,默认
gzip_comp_level 2; # 压缩等级,扽等级1,压缩比最小,但是快,等级9,压缩比最大,但是消耗cpu资源
gzip_types text/plain application/x-javascript text/css; # 要压缩的文件类型
gzip_vary on; # 缓存经过gzip压缩过的页面
}
虚拟主机 server 的配置
# http 跳转 https
server {
listen 80;
server_name xxx.com;
return 301 https://$host$request_uri;
}
# 路由匹配
server {
listen 80;
server_name aaa.com;
location = / { # 精准匹配
root /data/www;
index index.html
}
location ^~ /av { # 前缀匹配
...
}
location ~ /media { # 区分大小写的正则匹配
}
location ~* .*\.(png|jpg) { # 不区分大小写的正则匹配
}
location / { # 能用匹配,无其它匹配,任何请求都会匹配
}
# 前后端分离,反向代理后端服务
server {
listen 80;
server_name xxx.com;
location / {
root /data/www;
index index.html;
}
location /api {
proxy_pass http://192.168.1.1:8989; # 转发到http://192.168.1.1:8989/api
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
# 如果直接在nginx处理跨域可以设置一下的header返回给客户端
add_header Access-Control-Allow-Origin 'xxx.com';
add_header Access-Control-Allow-Credentials 'true';
}
}
# 设置正向代理
server {
listen 80;
resolver 8.8.8.8; # 指定dns服务器
location / {
proxy_pass http://$host$request_uri;
proxy_buffers 256 4k;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 30;
proxy_next_upstream error timeout http_500; # 错误重试
}
}