Nginx02 -- 配置文件

上一篇:Nginx01 -- Centos7 安装 Nginx 及常用命令_fengxianaa的博客-CSDN博客

Nginx默认的配置文件是conf/nginx.conf

结构如下:

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
    }
    ...     #http全局块
}

1. server配置

建议修改nginx.conf之前,先备份

修改 server配置,如下:只修改 server_name、location 中的 index

server {
        #监听端口
        listen       80;
        #域名,也可以是IP
        server_name  yase.cn;
        #编码识别
        #charset koi8-r;
        #日志格式及日志存放路径
        #access_log  logs/host.access.log  main;

				#location 用于匹配请求路径
        location / {
            #站点根目录,静态资源都可以放到这里,在这里就是:/usr/local/nginx/html
            root   html;
            #首页
            index  yase.html;
        }
        #错误页面
        #error_page  404              /404.html;
    }

修改完后,在命令行执行

修改配置文件后先用这个命令校验配置是否合法
[root@localhost nginx]# nginx -t

重新加载配置文件
[root@localhost nginx]# nginx -s reload

然后在 /usr/local/nginx/html 文件加下增加一个yase.html。至于内容

<CTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>亚瑟</title>
</head>
<body>
	<h1>亚瑟是最强大的英雄</h1>
</body>
</html>
注意:切记在保存html文件的时候一定要用utf-8编码

使用域名访问,改一下本机的host文件,加上

windsow中host:C:\Windows\System32\drivers\etc\hosts

#虚拟机的ip地址
192.168.56.104	yase.cn

在浏览器输入:yase.cn

error_page 配置:

# 当Nginx找不到资源时候,就会抛出一个404,
# 如果这时候有error_page, 就会访问指定的资源,在这里就是/404.html
error_page  404              /404.html;

在 /usr/local/nginx/html 文件夹中添加一个404.html

<CTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>亚瑟</title>
</head>
<body>
	<h1>亚瑟提示您:找不到这个页面</h1>
</body>
</html>
注意:切记在保存html文件的时候一定要用utf-8编码

然后访问 yase.cn/asdfklj.html

2. 虚拟主机

只需要记住一句话,一个server配置,就是一个虚拟主机。

根据之前的配置,再复制出一个 server 配置出来,把server_name和index修改一下

server {
        #监听端口
        listen       80;
        #域名
        server_name  lvbu.cn;
        #编码识别
        #charset koi8-r;
        #日志格式及日志存放路径
        #access_log  logs/host.access.log  main;

				#location 用于匹配请求路径
        location / {
            #站点根目录,静态资源都可以放到这里,在这里就是:/usr/local/nginx/html
            root   html;
            #首页
            index  lvbu.html;
        }
        #错误页面
        #error_page  404              /404.html;
    }

注意:这两个 server 配置是并列存在,另外:修改配置文件后,一定要重新加载

在 /usr/local/nginx/html 文件夹下增加一个lvbu.html。至于内容

<CTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>吕布</title>
</head>
<body>
	<h1>我的貂蝉,在哪里</h1>
</body>
</html>
注意:切记在保存html文件的时候一定要用utf-8编码

最后把host文件改一下

#虚拟机的ip地址
192.168.0.15	yase.cn lvbu.cn

然后分别访问 yase.cn 和 lvbu.cn

总结:通过一个服务器能达到多个网站的访问效果,这就是虚拟主机

注意:每个 server域名(ip)+端口(port) 是唯一的。

3. server配置优化

经过上面的测试,有一些问题:

  • 复制好几个server,导致 nginx.conf 文件很膨胀
  • 其次,所有的网站文件都在 html 这个文件夹下,很混乱

可以优化配置,首先执行下面的命令

[root@localhost nginx]# cd /home
在/home中建立nginx和web文件夹
[root@localhost home]# mkdir nginx web
[root@localhost home]# ll
total 0
drwxr-xr-x. 2 root root 66 Jan 23 13:05 nginx
drwxr-xr-x. 5 root root 51 Jan 23 13:07 web

[root@localhost home]# cd web
建立 yase lvbu 文件夹,然后把 yase.html、lvbu.html 分别复制到对应的文件夹,可以修改一下内容
[root@localhost web]# mkdir yase lvbu

在 /home/nginx 中建 yase.conf 文件,内容:

server {
        #监听端口
        listen       80;
        #域名
        server_name  yase.cn;
        #编码识别
        #charset koi8-r;
        #日志格式及日志存放路径
        #access_log  logs/host.access.log  main;

				#location 用于匹配请求路径
        location / {
            #站点根目录,静态资源都可以放到这里
            root   /home/web/yase;
            #首页
            index  yase.html;
        }
        #错误页面
        #error_page  404              /404.html;
    }

在 /home/nginx 中建 lvbu.conf 文件,内容:

server {
        #监听端口
        listen       80;
        #域名
        server_name  lvbu.cn;
        #编码识别
        #charset koi8-r;
        #日志格式及日志存放路径
        #access_log  logs/host.access.log  main;

				#location 用于匹配请求路径
        location / {
            #站点根目录,静态资源都可以放到这里
            root   /home/web/lvbu;
            #首页
            index  lvbu.html;
        }
        #错误页面
        #error_page  404              /404.html;
    }

最后,修改 nginx.conf,删除所有的serve配置,增加:

#导入/home/nginx文件夹中的所有conf文件
include /home/nginx/*.conf;

结果:

完成后,重新校验并加载配置文件,使用 nginx -tnginx -s reload

然后浏览器上访问

4. location

使用location配置可以实现网站资源的动静分离。但是这个匹配规则可是有些复杂

体验:

切换到 /home/web/yase 目录,新增一个html页面

<CTYPE html>
  <html>
    <head>
      <meta charset="utf-8">
      <title>亚瑟</title>
    </head>
    <body>
      <h1>亚瑟一技能可以穿墙</h1>
    </body>
  </html>
注意:切记在保存html文件的时候一定要用utf-8编码

这时候访问:http://yase.cn/one.html,结果是正常的

修改yase.conf

注意:这时候留两个 location,分别指向不同的路径

再次访问:http://yase.cn/one.html

这是因为不同的 location 配置有不同的优先级,报告404说明第一个 location 的优先级比较高

1. 表达式类型

location的表达式按照优先级分为 3 种类型,从高到低,依次是:

A. 等号类型(=) :精确匹配,也就是完全匹配,优先级最高,一旦匹配成功,直接返回。

   # 等号类型(=) :精确匹配,一旦匹配成功,不再匹配其他location。
   location = /a.html {#这里表示仅仅匹配 "/a.html" 
   			......
    }

B. ^~ 和 / 类型:前缀匹配。

   # ^~ 类型:前缀匹配
   location ^~ /images/ {#这里表示匹配所有以 /images/ 开头的请求。
   		......
    }
   # 多个B类型之间 ,长度优先(表达式的长度越长,优先级越高)

但是,下面的表达式也是前缀匹配

location /static/ {#这里表示匹配所有以 /static/开头的请求。
    ......
  }
  # 多个之间也是长度有限

如果以上两种同时存在,那么会以长度优先

C. ~和~* 类型:正则表达式匹配,“~”区分大小写,“~*”不区分大小写。

   # ~* 类型:正则表达式匹配,不区分大小写。
   location ~* \.(gif|jpg|jpeg)$ {#这里表示匹配所有以 gif jpg jpeg结尾的请求。。
   		......
    }
   # 多个C类型之间,顺序优先
   # ~ 类型:正则表达式匹配,区分大小写。
   location ~ /static/Abc {#这里表示匹配请求路径中包含 /static/Abc 的请求。
   		......
    }
    # 多个C类型之间,顺序优先,也就是location在前面的优先级高

但是需要注意:如果B、C同时存在,比如:

location ^~ /o {
    root /home/web/yase/b;
}   

location ~ /one {
    root /home/web/yase/c;
}

# 以上配置 B 类型优先
location /o {
    root /home/web/yase/b;
}   

location ~ /one {
    root /home/web/yase/c;
}

# 以上配置 C 类型优先

如果 3 个 locaiton 同时存在,比如:

location ^~ /one {
    root /home/web/yase/b;
}   
location /one.html {
    root /home/web/yase/d;
}     


location ~ /one {
    root /home/web/yase/c;
}

匹配过程是这样的:

  • 比较 B 类型的两个 location ,
    • 结果是 ^~ 类型,那么就不在匹配 C 类型
    • 结果不是 ^~ 类型,那么就继续匹配 C 类型

还需牢记的一点是,如果是这样配置的

   location /static/a {
   		root /home/web/yase;
    }
    # 如果访问路径是:/static/a.html,那么Nginx会去 /home/web/yase/static 文件夹下,找a.html

如果没有一个 location 可以匹配到请求路径,那么走默认规则

2. 生产建议

在生产环境中使用,一般不建议设置那么多的location,设置3种足以

第一个是首页

# 第一个,必选规则,访问域名是直接返回首页
  location = / {
      # 转发到首页
      proxy_pass http://localhost/yase.html;
    }
  location = /yase.html {
      root /home/web/yase;
  }

第二个,处理其他静态资源

 # 第二个,必选规则,访问静态资源时,直接返回,这也是nginx的强项
  location ^~ /static/ {
      #站点根目录,静态资源都可以放到这里
      root   /home/web/yase;
    }

第三个,就是处理其他动态资源了

  # 第三个,处理动态资源请求
  location / {
  		# 直接转发到后端业务服务器
      proxy_pass https://www.baidu.com/;
    }
  # 这样配置如果访问路径是:/getById?id=1
  # 就会转发到 https://www.baidu.com/getById?id=1
  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值