Nginx 配置文件初探

# 打开默认的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&timestamp=1517533829&app=news_article&utm_source=mobile_qq&iid=19478526221&utm_medium=toutiao_ios

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值