参考文档:nginx中文网
1.主模块的配置
默认主模块的配置:
# 指定 Nginx Worker 进程运行用户以及用户组,nginx的进程会以这个帐户来执行,主要是权限控制等,第一个参数是用户,第二个参数是用户组,可省略。
user www users;
# nginx开启的worker进程数,建议为cpu的核数,默认是1
worker_processes 5;
# 指定nginx进程运行文件存放地址
pid /var/log/nginx.pid;
# 改指令是包含的意思,当主配置文件太多时,可以写到其他文件中,然后包含进来,可以具体指定或指定某一目录下的所有.conf文件
include vhosts/test.conf;
include vhosts/*.conf;
2.事件模块的配置
默认事件模块的配置:
# 一个进程最大的连接数
#最大用户数:max_clients = worker_processes * worker_connections
#反向代理最大用户数:max_clients = worker_processes * worker_connections / 4
worker_connections 1024;
#惊群问题:当一个新连接到达时,如果激活了accept_mutex,那么多个Worker将以串行方式来处理,其中有一个Worker会被唤醒,其他的Worker继续保持休眠状态;如果没有激活accept_mutex,那么所有的Worker都会被唤醒,不过只有一个Worker能获取新连接,其它的Worker会重新进入休眠状态。默认缺省开启
accept_mutex on;
#同时接受多个新网络连接请求的功能,默认关闭
multi_accept on
3.http模块的配置
基本的一些配置
#文件扩展名与文件类型映射表
include mime.types;
# 指定文件类型,可以查看mime.types中的所有类型,默认为application/octet-stream,可以在location里面指定需要的
default_type application/octet-stream;
# 允许sendfile方式传输文件,一般不需要关注
sendfile on;
# listen用于监听服务器端口
# listen address[:port] #只监听指定IP的端口
# listen port #只监听主机上所有的ip端口
listen 80;
# 主要是跟主机名,名称可以是通配符和正则表达式,当nginx收到一个请求时,会取出server的值,而后跟众server_name进行比较
# 先做精确匹配: www.test.com
# 通配符"*"匹配 www.test.*
# 正则匹配 ~^www\d+\.test\.com$
server_name www.test.com;
# 保持连接的时长
keepalive_timeout 50
alias和root的配置(用来指定请求资源的真实路径)
测试:请求机器下/data/test1/2021-01-16_134232.png,两种配置
#alias的配置方式,请求:http://192.168.175.163/test2/2021-01-16_134232.png
location /test2/ {
alias /data/test1/;
#index index.html index.htm;
# autoindex on;
}
#rootd的配置方式,请求:http://192.168.175.163/test1/2021-01-16_134232.png
location /test1/ {
root /data;
#index index.html index.htm;
# autoindex on;
}
两则对比
alias | root |
必须以“/”结尾 | 都可,不影响 |
其请求资源路径不与location做拼接 | 与location路径作拼接 |
只能写在location中 | http,server,location |
index配置(网站初始页)
# 用于指定网页初始页,可以跟多个,在显示时一个一个找,找到即显示
index index.html index.htm aa.html
在/data/test1/下有index.html 和aa.html,配置规则如下:当访问http://192.168.175,163时,会显示index.html页面的内容,删除index.html会显示aa.html里面的内容
location / {
root /data/test1;
index index.html index.htm aa.html;
# autoindex on;
}
关于文件上传大小的配置
# 默认是1m,可以在http。 server location里面设置
client_max_body_size 500m;
location配置语法
匹配的优先级:首先精确匹配 ,其次以xx开头匹配^~,然后是按文件中顺序的正则匹配,最后是交给 / 通用匹配
- =:精确匹配
- ~:正则表达式模式匹配,匹配时区分字符大小写
- ~*:正则表达式模式匹配,匹配时忽略字符大小写
- ^~:只需要前半部分与uri匹配即可,不检查正则表达式
# 默认配置,优先级最低
location / {
.....
}
location ~* \.(jpg|png|gif)$ {
...
}
location ~.* \.(css|js)? $ {
...
}
反向代理相关的一些配置
# 代理的后端服务器的url
proxy_pass URL;
# 设置超时时间,默认60s
proxy_connect_timeout 60;
负载均衡的一些配置
# 负载均衡的配置
upstream backend {
server backend1.example.com weight=10;
server backend2.example.com:8080;
}
server {
location / {
proxy_pass http://backend;
}
}
nginx负载均衡的策略:
- 轮询(默认):如果其中某个服务器挂掉,则剔除轮询
- 权重(weight):默认为1,数值越大,分配的越多,服务器性能不均使用,实现
server backend1.example.com weight=10;
- ip_hash::根据请求的访问电脑ip的hash去分配,固定访问一台服务器,可解决session问题
upstream backend {
ip_hash;
server backend1.example.com weight=10;
server backend2.example.com:8080;
}
4.fair:按响应时间分配,响应短的优先分配
upstream backend {
server backend1.example.com weight=10;
server backend2.example.com:8080;
fair;
}
静态资源的一些配置
# 设置静态资源的过期时间
expire 5h;
# 自动生成目录列表,当访问资源时,列举出文件目录
autoindex on;
# 显示文件大小,单位(B,KB, MB 或 GB)
autoindex_exact_size on;