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、正则匹配
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 部分起始路径) > (/)
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
,修改配置文件我们进行访问,成功访问到该图片。
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';
}
}