Nginx 配置与使用

一、配置文件语法格式

先来看一个简单的nginx 配置

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /nginx_status {
    	   stub_status on;
    	   access_log   off;
  	    }
    }
}

在整个Nginx的配置中,分为3个类别:配置块、配置块中的属性、特定参数

配置块:
比如上述配置中的:events、http、server等,由一对{}包围。
在这里插入图片描述

配置块中的属性
比如上述配置中的:worker_processes 、worker_connections、include、listen等。
是配置块中的单行记录,配置块中的属性包含属性名和属性值(属性值不仅仅会有一个,也可能会有多个)
在这里插入图片描述
在这里插入图片描述
特定参数
比如上述配置中的: /nginx_status 其中server块嵌套于http块,其可以直接继承访问Http块当中的参数。
可以理解为语句块名称和 { 之间的部分
在这里插入图片描述

配置块名称开头用 {} 包裹其对应属性
属性基于空格切分属性名与属性值,属性值可能有多个项 都以空格进行切分 如:access_log logs/host.access.log main
参数其配置在 块名称与大括号间,其值如果有多个也是通过空格进行拆

server匹配

worker_processes  1;
#events  事件模块
events {
    worker_connections  1024; #配置最连接数
}

# http是最最常用的一个配置
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65; #最大超时时间

	#可配置一个具体的站点(可配置多个server也就是多个站点)
    server {  #server和 { 之间一定要加空格,不然就会识别不了
        listen       80;  #站点监听的端口(只能监听一个端口)
        server_name  localhost;  #监听站点的名称(说白了也就是域名)
        location / {	#具体路径
            root   html;
            index  index.html index.htm;
        }
        location /nginx_status {
    	   stub_status on;
    	   access_log   off;
  	    }
    }
    server {
        listen       80;  #站点监听的端口(只能监听一个端口)
        server_name  www.project.com;  #监听站点的名称
    }
}

问题1:两个server都监听80端口,不会冲突么?
回答::不会,两个server共用一个80端口,在一个进程里面,所以是不会冲突的


问题2:server_name可以写多个么?
回答::可以,多个值之间使用空格隔开即可,比如以下例子:

server {
    listen       80;
    server_name  www.project.com www.pj.com *.project.com www.project.*;
}

.project.com 只要是project.com结尾的都会进入对应的server,这是左边匹配
www.project. 只要是project.com开头的都会进入对应的server,这是右边匹配


问题3:如果某个域名匹配到多个server,那么最终会进入哪个呢?比如有以下配置

server {
    listen       80;
    server_name  www.project.com www.pj.com *.project.com www.project.*;
}
server {
    listen       80;
    server_name  www.pj.com *.project.com www.project.*;
}

回答:
①、基于最大匹配原则,若访问的域名为www.project.com,那么则会进入第一个server,因为server中有和访问域名完全相同的值
②、左边匹配大于右边匹配
③、若所有的优先级都是一样的,则谁的位置在前,就会匹配到哪个
④、若所有的属性都不匹配,则会默认进入第一个server,当然我们可以加关键字default来决定这种情况下默认进入的server

server {
    listen       80 default;
    server_name  www.project.com www.pj.com *.project.com www.project.*;
}
server {
    listen       80;
    server_name  www.pj.com *.project.com www.project.*;
}

location匹配

localtion是根据具体的目录来匹配的,可以有多个,存在多种匹配方式

location / {
    root   html;
    index  index.html index.htm;
}
location /nginx_status {
   stub_status on;
   access_log   off;
}


二、配置第一个静态WEB服务

基础站点演示:

创建站点目录 mkdir -p /usr/www/luban
编写静态文件
配置 nginx.conf
配置server
配置location

基本配置介绍说明:
(1)监听端口
语法:listen address:
默认:listen 80;
配置块:server

(2)主机名称
语法:server_name name[……];
默认:server_name “”;
配置块:server
server_name后可以跟多个主机名称,如server_name www.testweb.com、download.testweb.com;。
支持通配符与正则

(3)location
语法:location[=|~|~*|^~|@]/uri/{……}
配置块:server

1.=表示把URI作为字符串,以便与参数中的uri做完全匹配。
2./ 基于uri目录匹配
3.~表示正则匹配URI时是字母大小写敏感的。
4.~*表示正则匹配URI时忽略字母大小写问题。
5.^~表示正则匹配URI时只需要其前半部分与uri参数匹配即可。

location的匹配优先级规则
精确匹配 =
字符串前缀匹配 ^~
按照匹配顺序的正则匹配(AB正则都匹配上了,谁在前配置,谁匹配上)
不带任何修饰的前缀匹配
当有匹配成功时,停止匹配,按照当前匹配规则处理请求
前缀匹配,有包含关系式,按照最大匹配长度原则匹配
最低优先级是通配符/

(4)root 指定站点根目录
可配置在 server与location中,基于ROOT路径+URL中路径去寻找指定文件。

(5)alias 指定站点别名
只能配置location 中。基于alias 路径+ URL移除location 前缀后的路径来寻找文件。
如下示例:

location /V1 {
      alias  /www/old_site;
      index  index.html index.htm;
}

#防问规则如下
URL:http://xxx:xx/V1/a.html
最终寻址:/www/old_site/a.thml

server {
    listen       80;
    server_name  localhost;
	location = /images{
		return 205;
	}
	location ^~ /images {
	   return 200;
	}
	location ^~ /images/test.png {
		return 201;
	}
	location ~ \.(gif|jpg|png|js|css)$ {
		return 202;
	}
	location ~* \.png$ {
	   return 203;
	}
	location / {
	   return 204;
	}
}

http://localhost/ 返回204
http://localhost/images 返回205
http://localhost/images/id 返回200
http://localhost/images/test.png 返回201
http://localhost/haha.png返回202


三、配置案例

1、动静分离实现

创建静态站点
配置 location /static
配置 ~* .(gif|png|css|js)$

基于目录动静分离

   server {
        listen 80;
        server_name *.luban.com;
        root /usr/www/luban;
        location / {
                index luban.html;
        }
        location /static {
         alias /usr/www/static;
        }
 }

基于正则动静分离

location ~* \.(gif|jpg|png|css|js)$ {
      root /usr/www/static;
}

2、防盗链

#加入至指定location 即可实现
valid_referers none blocked *.aaa.com;
 if ($invalid_referer) {
       return 403;
}

3、下载限速

location /download {
    limit_rate 1m; //限制每S下载速度
    limit_rate_after 30m; // 超过30 之 后在下载
}

4、IP 黑名单

创建IP黑名单

#封禁指定IP
deny 192.168.0.1;
allow 192.168.0.1;
#开放指定IP 段
allow 192.168.0.0/24;
#封禁所有
deny    all;
#开放所有
allow    all;
#创建黑名单文件
echo 'deny 192.168.0.132;' >> balck.ip
#http 配置块中引入 黑名单文件
include       black.ip;



四、日志配置

日志格式:
log_format main '$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “KaTeX parse error: Double superscript at position 33: … '̲status b o d y b y t e s s e n t " body_bytes_sent " bodybytessent"http_referer” ’
‘“ h t t p u s e r a g e n t " " http_user_agent" " httpuseragent""http_x_forwarded_for”’;

access_log logs/access.log main;

#基于域名打印日志
access_log logs/$host.access.log main;

error日志的设置
语法:error_log /path/file level;
默认:error_log logs/error.log error;
level是日志的输出级别,取值范围是debug、info、notice、warn、error、crit、alert、emerg,

针对指定的客户端输出debug级别的日志
语法:debug_connection[IP|CIDR]
events {
debug_connection 192.168.0.147;
debug_connection 10.224.57.0/200;
}
注意:debug 日志开启 必须在安装时 添加 --with-debug (允许debug)

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值