nginx 中server块中参数分析

    #设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个locating模块。比如本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口,比如都使用80端口提供web服务、一个server相当于一个代理服务器,可以配置多个server。
    server {

        #配置server监听的端口
        listen       80;

        #本server的名称,当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配,以空格方式隔开多个FQDN,当然也支持正则表达式的方式匹配主机名。
        server_name  localhost;
    
      #指定编码格式,推荐修改为UTF-8字符编码
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #location其实是server的一个指令,为nginx服务器提供比较多而且灵活的指令,都是在location中体现的,主要是基于nginx接受到的请求字符串,对用户请求的UIL进行匹配,并对特定的指令进行处理,包括地址重定向、数据缓存和应答控制等功能都是在这部分实现,另外很多第三方模块的配置也是在location模块中配置。
        location / {

            #相当于默认页面的目录名称,默认是相对路径(如果是基于yum方式安装则是"/usr/share/nginx/html/",如果是基于源码方式安装,则在安装目录的下,如"/usr/local/nginx/html/"),当然咱们也可以使用绝对路径配置。
            root   html;

            #默认的页面文件名称
            index  index.html index.htm;
        }

        #错误页面的文件名称
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
     
        error_page   500 502 503 504  /50x.html;

        #location处理对应的不同错误码的页面定义到/50x.html,这个跟对应其server中定义的目录下。
        location = /50x.html {

            #定义默认页面所在的目录
            root   html;
        }
    }

一、server全局块

         listen       80;

        #本server的名称,当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配,以空格方式隔开多个FQDN,当然也支持正则表达式的方式匹配主机名。
        server_name  localhost;
    
      #指定编码格式,推荐修改为UTF-8字符编码
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

nginx主机怎样配置:

1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站
2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台
3、基于ip的虚拟主机。

基于虚拟主机配置域名

#当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/www目录下文件
    server {
        listen       80;
        server_name  www.lijie.com;
        location / {
            root   data/www;
            index  index.html index.htm;
        }
    }
    #当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/bbs目录下文件
    server {
        listen       80;
        server_name  bbs.lijie.com;
        location / {
            root   data/bbs;
            index  index.html index.htm;
        }
    }

基于端口的虚拟主机

#当客户端访问www.lijie.com,监听端口号为8080,直接跳转到data/www目录下文件
    server {
        listen       8080;
        server_name  8080.lijie.com;
        location / {
            root   data/www;
            index  index.html index.htm;
        }
    }
    #当客户端访问www.lijie.com,监听端口号为80直接跳转到真实ip服务器地址 127.0.0.1:8080
    server {
        listen       80;
        server_name  www.lijie.com;
        location / {
        proxy_pass http://127.0.0.1:8080;
                index  index.html index.htm;
        }
    }

二、location 块

1、正则匹配

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qlW0UaDm-1632828831550)(C:\Users\陌殇\AppData\Roaming\Typora\typora-user-images\image-20210911222232368.png)]

location正则案例

#优先级1,精确匹配,根路径
    location =/ {
        return 400;
    }
    #优先级2,以某个字符串开头,以av开头的,优先匹配这里,区分大小写,匹配符合后,停止往下搜索正则,采用这一条。
    location ^~ /av {
       root /data/av/;
    }
    #优先级3,区分大小写的正则匹配,匹配/media*****路径 ,匹配符合以后,还要继续往下搜索
    location ~ /media {
          alias /data/static/;
    }
    #优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里
    location ~* .*\.(jpg|gif|png|js|css)$ {
       root  /data/av/;
    }
    #优先7,通用匹配
    location / {
        return 403;
    }
#顺序 优先级:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ,* 正则顺序) > (location 部分起始路径) > (/)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mBCFQON5-1632828831556)(C:\Users\陌殇\AppData\Roaming\Typora\typora-user-images\image-20210911225404959.png)]

2、设置请求资源的目录(root/alias)

root根目录配置

用户请求的最终结果是要返回数据,当响应文件在 Nginx 服务器本地时,需要进行本地文件位置、读或写、返回执行结果的操作。Nginx 中的 root 指令可以设定请求 URL 的本地文件根目录,如下表所示。

名称根目录指令
指令root
作用域http, server, location
默认值on
指令说明设定请求 URL 的本地文件根目录

配置样例如下:

location ^~ /images {
      root /home/data/;
      index index.png;
     }

我们提前准备一张图片,cd /home ,为了方便测试,我们创建一个专门的文件夹mkdir -p data/images,修改配置文件我们进行访问,成功访问到该图片。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AiQVkhse-1632828831559)(C:\Users\陌殇\AppData\Roaming\Typora\typora-user-images\image-20210911171441675.png)]

alias虚拟目录配置

alias 指定的目录是 location 路径的实际目录,其所在 location 的 rewrite 指令不能使用 break 参数

名称访问路径别名指令
指令alias
作用域location
默认值
指令说明默认情况下,本地文件的路径是 root 指令设定根目录的相对路径,通过 alias 指令可以将匹配的访问路径重新指定为新定义的文件路径。

alias配置样例

location  /images {
      alias /home/data/images;
      index index.png;
     }
#上面这种配置当然没有问题,但是下面这种方式就有问题了 在images后面加一个/
location  /images/ {
      alias /home/data/images;
      index index.png;
     }
#解决办法:在alias 的路径最后加/ ,即如下 
location  /images/ {
      alias /home/data/images/;
      index index.png;
     }

区别:

#root :root的路径+location路径/home/data/+images
http:192.168.198.1/home/data/images
#alias:将alias的路径直接替换成location的路径,为了出错,alias的访问路径最后建议以/结尾
http:192.168.198.1/home/data/images/
3、error_page指令

通过error_page指令设置错误的页面。

举例说明

(1)可以指定具体跳转的地址

   server {
    
        error_page  404          http:www.baidu.com;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  404  /50x.html;
        location = /50x.html {
            root   html;
        }

}

(2)可以重定向地址

 server {
       error_page  404         @jump_to_error;
       location @jump_to_error{
        default_type text/plain;#表示以文本的形式输出
        return "404 NOT Found Page.."
    }
    
}

(3)使用location的@符号完成错误信息展示

 server {
    
     error_page 404  @jump_to_error;
    
     location @jump_to_error{
      default_type text/plain; #表示以文本的方式输出
      return 404 'Not Found Page';
    }
}

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐