# 打开默认的nginx配置文件
# vi /usr/local/nginx/conf/nginx.conf.default
1.配置文件模块分区。
http{
————各种操作————
server{
...
}
server{
————各种操作————
location{
————各种操作————
}
location{
...
}
}
}
配置文件中只能有一个http{...}
http中可以有多个server{...},每一个server区块都可以是一个项目
每一个server{}中,可以有多个location{},每一个location可以是一个匹配方法。
2.location区块
location的作用:匹配用户访问的地址uri,执行不同的操作或配置。(重点是匹配)
准确来说,匹配的部分是URL去掉域名,去掉get参数?之后的部分。
精准匹配
location = / {
#自定义操作
}
~正则匹配,^以关键词开始,*忽略大小写
location ^~ /images/ {
#自定义操作
}
或匹配
location ~* \.(gif|jpg|jpeg|png) {
#自定义操作
}
根据资源目录进行匹配
location /documents/ {
#自定义操作
}
所有匹配不满足时,匹配默认的location /
location / {
#自定义操作
}
官方给出的php文件关联模块,直接使用
# location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
# }
3.日志文件
1.错误日志
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
| -------- | ------------------------
| debug | 调试模式,记录的日志最多
| info | 信息
| notice | 提示
| warn | 警告
| error | 错误
| crit | 默认为crit,记录的日志最少
2.访问日志
设置日志格式 命名 格式
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
| ------------------------- | --------------------------------------------------
| **$remote_addr** | 客户端的ip地址(代理服务器,显示代理服务ip)
| $remote_user | 用于记录远程客户端的用户名称(一般为“-”)
| $time_local | 用于记录访问时间和时区
| **$request** | 用于记录请求的url以及请求方法
| $status | 响应状态码,例如:200成功、404页面找不到等。
| $body_bytes_sent | 给客户端发送的文件主体内容字节数
| **$http_user_agent** | 用户所使用的代理(一般为浏览器)
| **$http_x_forwarded_for** | 可以记录客户端IP,通过代理服务器来记录客户端的ip地址
| $http_referer | 可以记录用户是从哪个链接访问过来的
调用 地址 命名
#access_log logs/access.log main;
访问日志和错误日志都可以放在http{}下,进行整体设置,或放在server{}中,进行单个项目的设置。
3.日志轮转
nginx日志没有自用的工具,可以用改名加重启的方式生成新log文件。然后根据需求是否转移旧文件。
# vim logrotate.sh
------------------内容-------------------
#!/bin/bash
date_info=$(date +%F-%H:%M)
mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access.log.$date_info
/usr/local/nginx/sbin/nginx -s reload
...
------------------内容-------------------
# crontab -e
* */6 * * * /bin/sh /scripts/logrotate.sh &>/dev/null
4.开启网站的目录
# autoindex on
# autoindex_exact_size off;
默认为on,显示出文件的确切大小,单位是bytes。
改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
# autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
改为on后,显示的文件时间为文件的服务器时间
5.缓存
# expires 30s; //表示把数据缓存30秒
# expires 30m; //表示把数据缓存30分
# expires 10h; //表示把数据缓存10小时
# expires 3d; //表示把数据缓存3天
# expires -1; //表示不缓存
可以放在server,和location中
6.压缩
# gzip on;
# gzip_min_length 1k;
# gzip_buffers 4 16k;
# gzip_http_version 1.0;
# gzip_comp_level 2;
# gzip_types text/plain text/css text/javascript application/javascript image/jpeg image/gif image/png;
# gzip_vary off;
# gzip_disable "MSIE [1-6]\.";
第1行:开启Gzip
第2行:不压缩临界值,大于1K的才压缩,一般不用改
第3行:gzip_buffers number,size,压缩文件时使用的缓存空间的大小,默认128
第4行:用了反向代理的话,末端通信是HTTP/1.0,默认是HTTP/1.1
第5行:压缩级别,1-10,数字越大压缩的越好,时间也越长
第6行:进行压缩的文件类型,建议js|css|图片,注:javascript有两种写法,最好都写上
第7行:跟Squid等缓存服务有关,on的话会在Header里增加"Vary:Accept-Encoding"
第8行:IE6对Gzip不怎么友好,不给它Gzip了
7.访问限制
# deny ip; 禁止IP访问
# deny all; 在全部禁止的情况下允许访问的IP
# allow ip;
8.重写url
语法:rewrite 匹配内容 替代内容 flag标记
| -flag标记-| ----------------------------------------------------
| last | 本条规则匹配完成后,继续向下匹配新的location URI规则
| break | 本条规则匹配完成即终止,不再匹配后面的任何规则
| redirect | 返回302临时重定向,浏览器地址会显示跳转后的URL地址
| permanent | 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
last与break,进行重定向时,其客户端URL地址不会改变。
redirect与permanent,进行重定向时,其客户端URL地址会发生改变。
用法1:伪静态
location / {
rewrite /index.html /index.php last;
}
用法2:域名重定向
server {
rewrite / http://www.baidu.com permanent;
}
用法3:域名重写,开启pathinfo规则
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
}
}
用法4:防盗链
location / {
valid_referers URL;
if ($invalid_referer) {
return 404;
}
}
这个URL是写可以访问的域名,比如我们自己的图片服务器域名。
如果别人引用的咱们的图片,那么他的域名必然不是这个URL。
如此可以防止盗链。
9.反向代理(精简)
官方给出的反向代理代码
# location ~ \.php$ {
# proxy_pass http://127.0.0.1;
# proxy_read_timeout 180s;
# }
http://127.0.0.1 替换成任何一个apache服务器的IP即可
10.三方模块
三方模块:https://www.nginx.com/resources/wiki/modules
可以下载三方模块,然后再linux端安装。
例如
# tar zxvf 包1.tar.gz
# tar zxvf ngx-fancyindex-v0.4.3.tar.gz
# tar xvf echo-nginx-module-0.61.tar.gz
# cd /root/nginx-1.16.0
# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --add-module=/root/ngx-fancyindex-0.4.3/ --add-module=/root/echo-nginx-module-0.61 --add-module=包1
# make && make install && make upgrade
使用,通过英文帮助手册的样例,进行使用(无助)
11.安全
隐藏Nginx版本号
# 在http段加入server_tokens off
# http {
# server_tokens off;
# }
12.其他
####################################################
worker_processes 1;
events {
worker_connections 1024;
}
引用:https://blog.csdn.net/zhuyu19911016520/article/details/90714429
一般一个进程足够了,你可以把连接数设得很大。(worker_processes: 1,worker_connections: 10,000)
如果有SSL、gzip这些比较消耗CPU的工作,而且是多核CPU的话,可以设为和CPU的数量一样。(worker_processes: CPU核心数)
或者要处理很多很多的小文件,而且文件总大小比内存大很多的时候,也可以把进程数增加,以充分利用IO带宽(主要似乎是IO操作有block)
####################################################
# pid logs/nginx.pid;
无所谓改不改
include mime.types;
包含语法,从此可以将一部分设置文件写在外面,用include引用
####################################################
避免浏览器自动播放文件:
有时,需要用户下载文件而不是直接播放,而Nginx在默认配置下,会根据文件的后缀来匹配相应的MIME类型,并写入Response header,导致浏览器播放文件而不是下载,这时需要通过配置让Nginx返回的MIME类型为下面这个类型:
在location模块配置
application/octet-stream
这个类型会让浏览器认为响应是普通的文件流,并提示用户下载文件。可以通过在Nginx的配置文件中做如下配置达到这样的目的:
location /download/ {
types { }
default_type application/octet-stream;
}
这样当Url路径中包含/download/时,MIME类型会被重置为application/octet-stream。另外,nginx自带的MIME类型映射表保存在conf/mime.types中。
https://blog.csdn.net/qq_26711103/article/details/81116900
####################################################
文件上传大小限制放开
有的时候后端的Web-Server提供文件上传的服务,但是如果前端使用Nginx做反向代理时,会出现文件无法上传的问题,这可能是由于Ngxin默认对客户端请求的body的限制。因为,默认情况下Nginx对客户端请求的大小限制是1m,而上传的文件往往超过1m。可以通过修改如下配置项,来放宽这个限制:
client_max_body_size 10m;
将这个值设置为0,可以取消这个限制。这个配置项可以用在http, server, location配置节中。
https://blog.csdn.net/qq_26711103/article/details/81116900
####################################################
sendfile on;
https://www.jianshu.com/p/70e1c396c320?utm_campaign
####################################################
一篇优化nginx参数的文章参上
https://www.toutiao.com/a6517750010149339655/?tt_from=mobile_qq&utm_campaign=client_share×tamp=1517533829&app=news_article&utm_source=mobile_qq&iid=19478526221&utm_medium=toutiao_ios