index

用于指定站点中的首页,仅当访问的url中uri为”/“时,server下的一级 index才生效指令才生效

  1. upstream apis {
  2. ip_hash;
  3. server 127.0.0.1:18080;
  4. }
  5. server {
  6. listen 80;
  7. server_name 47.95.109.208;
  8. keepalive_timeout 60;
  9. send_timeout 10s;
  10. root /xxx/;
  11. index index.html;
  12. location ^~ /static/ {
  13. access_log off; #对于静态文件,不记录日志
  14. expires 7d;
  15. }
  16. location /api {
  17. proxy_set_header Host $host;
  18. proxy_set_header X-Real_IP $remote_addr;
  19. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  20. proxy_pass http://apis;
  21. }
  22. error_page 500 502 503 504 /50x.html;
  23. location = /50x.html {
  24. root html;
  25. }
  26. }

如果有站点下有一个url有单独的页面

  1. server {
  2. listen 80;
  3. server_name 47.95.109.208;
  4. keepalive_timeout 60;
  5. send_timeout 10s;
  6. root /xxx/; # 这里的root是一级root,作用域为整个server
  7. index index.html; #这个是47.95.109.208站点下的首页,即/xxx/index.html
  8. location ^~ /static/ {
  9. access_log off; #对于静态文件,不记录日志
  10. expires 7d;
  11. }
  12. location /login.html {
  13. index login.html #这个是47.95.109.208/login.html 的页面
  14. }
  15. error_page 500 502 503 504 /50x.html;
  16. location = /50x.html {
  17. root html; # 这里的root是当前location下,按就近原则取root的值
  18. }
  19. }

index 的处理逻辑

  1. 首先对index指令配置的多个文件做顺序查找,看文件是否存在。
  2. 如果存在,就结束查找过程,把这个文件附加到请求的request_uri后面,并且发起一个内部的redirect。
  3. 如果全部尝试后都不存在,那么该index指令执行结束,nginx会继续执行content阶段下一个指令的事情。

@

定义一个location段,不能被外部请求所访问,只能用于nginx内部配置指令使用,通常与try_files 结合使用

try_files

  1. server {
  2. listen 80;
  3. server_name xxx.com;
  4. root /mnt/try;
  5. location / {
  6. try_files $uri @default;
  7. }
  8. location @default {
  9. root /mnt/default;
  10. }
  11. }

浏览器访问 http://xxx.com/abc/index.html 时,当前的$uri值为/abc/index.html
根据上面的配置
首先会去/mnt/try/abc/index.html找,如果找得到直接返回
如果找不到,则内部跳转导@default到/mnt/default/abc/index.html去找