Nginx常规配置
中文网址
location匹配
location 语法:location[=|~|~*|^~|@]/uri/{……}
/ 基于uri目录匹配
=表示把URI作为字符串,以便与参数中的uri做完全匹配
~表示正则匹配URI时是字母大小写敏感的
~*表示正则匹配URI时忽略字母大小写问题
^~表示正则匹配URI时只需要其前半部分与uri参数匹配即可
location = /baidu.html {
proxy_pass http://www.baidu.com;
}
location /static {
#root的处理结果是:root路径+location路径
#root /usr/www/;
#alias的处理结果是:使用alias路径替换location路径
alias /usr/www/static/;
index index.html;
}
#下载限速
location /download {
alias /usr/www/download/;
# 限速2m
limit_rate 2m;
# 30m之后限速
limit_rate_after 30m;
}
location ~* \.(gif|png|jpg|css|js)$ {
root /usr/www/static/;
}
日志配置
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/$host.access.log main;
rewrite重定向
指令语法:rewrite regex replacement[flag]; 应用位置:server、location、if rewrite是实现URL重定向的重要指令,他根据regex(正则表达式)来匹配内容跳转到replacement,结尾是flag标记
location / {
rewrite ^/ http://www.baidu.com;
}
location / {
rewrite '^/images/(.*)\.(png|jpg)$' /fox?file=$1.$2;
set $image_file $1;
set $image_type $2;
}
location /fox {
root html;
# 按顺序检查文件是否存在,返回第一个找到的文件.
#如果所有的文件都找不到,会进行一个内部重定向到最后一个参数
try_files /$arg_file /image404.html
}
location /image404.html {
return 404 "image not found exception";
}
gzip压缩策略
浏览器请求会告诉服务端当前浏览器支持的压缩类型,服务端会将数据根据浏览器支持的压缩类型进行压缩返回 对静态资源进行压缩
# 开启gzip
gzip on;
# 开始压缩的最小长度
gzip_min_length 1000; #1k
# 压缩级别(级别越高,压的越小,越浪费CPU计算资源)
gzip_comp_level 5; # 1-9
# 对哪些类型的文件用压缩 如txt,xml,html ,css
# jpg,png本身就是压缩格式,不建议用gzip
gzip_types text/plain application/json application/x-javascript
application/css application/xml application/xml+rss text/javascript;
location /static {
alias /usr/local/apps/static/dlib-19.18/;
# 显示目录
autoindex on;
}
常用图片设置示例
location ~ .*\.(gif|jpg|jpeg|png)$ {
expires 24h;
root /home/images/;#指定图片存放路径
access_log /usr/local/websrv/nginx-1.9.4/logs/images.log;#日志存放路径
proxy_store on;
proxy_store_access user:rw group:rw all:rw;
proxy_temp_path /home/images/;#图片访问路径
proxy_redirect off;
proxy_set_header Host 127.0.0.1;
client_max_body_size 10m;
client_body_buffer_size 1280k;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 40k;
proxy_buffers 40 320k;
proxy_busy_buffers_size 640k;
proxy_temp_file_write_size 640k;
if ( !-e $request_filename)
{
proxy_pass http://127.0.0.1;#默认80端口
}
}
HTTPS配置
# 使用openssl工具生成一个RSA私钥
openssl genrsa -des3 -out server.key 1024
# 生成CSR(证书签名请求)
openssl req -new -key server.key -out server.csr
# 删除私钥中的密码
openssl rsa -in server.key -out server.key
# 生成自签名证书
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
server {
listen 443 ssl;
server_name fox.yuanma.com;
ssl_certificate server.crt;
ssl_certificate_key server.key;
location / {
proxy_pass http://backend/;
}
}
Nginx性能调优
1.nginx默认是没有开启利用多核cpu的配置的。需要通过增加worker_cpu_affinity配置参数来充分利用 多核cpu。 通过绑定Nginx worker进程到指定的CPU内核,不会出现多个worker进程都在抢同一个CPU的情况。
#2核cpu,开启2个进程
worker_processes 2;
worker_cpu_affinity 01 10;
#4个cpu,开启4个进程
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
2.配置worker进程最大打开文件数 ,避免nginx出现“too many open files”错误
worker_rlimit_nofile 65535;
3.设置io模型, select,poll,epoll(linux),kqueue(unix) 。 设置并发连接数 worker_connections , 默认1024 是否打开accept锁 语法:accept_mutex[on|off] 默认:accept_mutex on; accept_mutex是Nginx的负载均衡锁,当某一个worker进程建立的连接数量达到worker_connections配置的最大连接数的7/8时,会大大地减小该worker进程试图建立新TCP连接的机会,accept锁默认是打开的,如果关闭它,那么建立TCP连接的耗时会更短,但worker进程之间的负载会非常不均衡,因此不建议关闭它。 使用accept锁后到真正建立连接之间的延迟时间 语法:accept_mutex_delay Nms; 默认: accept_mutex_delay 500ms;
events{
use epoll;
worker_connections 10240;
accept_mutext on;
accept_mutex_delay 500ms;
}