这里主要是记录本人在使用nginx搭建服务器的时候,遇到的一些问题,以及结合查找资料的一些学习笔记。
编写自己的配置文件
Nginx的配置文件在目录默认是/etc/nginx。
如果我们自己编写一些新的配置文件的话,这里我们建议将新的配置文件归到sites-available目录下。然后这里讲解一下需要用到该目录下有两个子目录:
sites-available,存放所有可用的网站配置(这里目录存放真正用到的配置);
sites-enabled,Nginx运行时读取该目录下的配置文件,该目录下的文件都是软连接,指向sites-available下的实际配置文件。同时只有在sites-enabled下有软连接的配置文件才会生效。
下面将首先在sites-available目录下创建配置文件,使用域名www.example.com作为配置文件名称,然后在sites-enabled下创建一个指向该配置文件的软连接使其生效。
为了避免配置文件冲突,需要将默认的default配置文件在sites-enabled下的软连接删除。
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##
# Default server configuration
#
server {
listen 9090 ;
root /home/xxx/www_data;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
root /home/xxx/www_data/html;
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
location /soft {
root /home/xxx/www_data/soft;
}
location ~* .(mov|mp4|mp3)$ {
#这里表示使用正则表达式,不区分大小写
root /home/xxx/www_data/video/;
}
}
location配置规则
对于配置文件中的location配置规则,这里我们简单的说明一下:
location语法
1.语法规则:
location [=|~|~*|^~] /url/ { … }
2.location表达式类型
~ 表示执行一个正则匹配,区分大小写
~* 表示执行一个正则匹配,不区分大小写
^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location。
= 进行普通字符精确匹配。也就是完全匹配。
@ "@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
3.优先级规则
等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项
前缀普通匹配(^~)优先级次之。不支持正则表达式。使用前缀匹配,如果有多个location匹配的话,则使用表达式最长的那个
正则表达式类型(~ ~*)的优先级次之。一旦匹配成功,则不再查找其他匹配项
常规字符串匹配,如果有多个location匹配的话,则使用表达式最长的那个
4.说明
4.1先判断精准命中,如果命中,立即返回结果并结束解析过程
4.2若未结束,判断前缀普通命中,如果有多个命中,使用表达式“最长”的命中结果,结束解析过程
4.3若未结束,继续判断正则表达式的匹配,按正则表达式顺序为准,由上至下一旦匹配成功1个,立即返回结果,并结束解析过程
4.4若未结束,继续普通命中,普通命中和前缀普通命中相似,顺序无所谓,按照location表达式的长短来确定命中结果
配置文件中几个需要了解的知识
-
try_files解决刷新404的问题
location / {
root /mydata/transfer/html/helper/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}在配置中加上try_files,意思跟翻译差不多,“尝试读取文件”。
uri这个是nginx的一个变量,存放着用户访问的地址,例如http://localhost:8200/chooseSize那么uri就是/chooseSize;uri/代表访问的是一个目录例如http://localhost:8200/chooseSize/那么就是/chooseSize/;最后/index.html就是我们首页的地址。
最终上面的意思是:
-
如果第一个存在$uri,直接返回;
-
不存在的话读取第二个$uri/,如果存在,读取返回;
-
如果还是不存在,就会fall back到 try_files 的最后一个选项 /index.html,发起一个内部 “子请求”,也就是相当于 nginx 发起一个 HTTP 请求到 http://localhost:8200/index.html,再通过前端路由到/chooseSize。
-
-
http的url和location的访问
location ~* .(mov|mp4|mp3)$ {
#这里表示使用正则表达式,不区分大小写
root /home/xxx/www_data/video/;
}如果一个请求的URI是http:xxxx/video/a.mp4时,web服务器将会返回服务器上:
/home/xxx/www_data/video/video/a.mp4的文件,而不是/home/xxx/www_data/video/a.mp4文件。