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语法 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文件。