nginx.conf路由配置?

目前的配置文件和文件结构


worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       70;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }

}

image.png

在demo目录下有一个index.html和home.html

image.png

需要配置
访问 localhost:90/demo, 加载demo下的index.html
访问 localhost:90/demo/home, 加载demo下的home.html

应该怎么写?

我试了下在和 server 同级加了一个 server

server {
        listen       90;
        server_name  localhost;
        location /demo {
            root   demo;
            index  index.html index.htm;
        }
    }

但是没有效果, 访问是404, 不是很理解 这种写法有什么问题吗?

阅读 2.9k
4 个回答

1.对于localhost:90/demo 这个请求,你当前的配置应该是访问到了demo/demo/这里去了;
2.对于localhost:90/demo/home 这个请求你的配置是访问到了demo/demo/home/这里去了;

显然这两个目录都不存在。

  1. D:\Temp\Nginx\Installer\nginx-1.23.3\demo文件夹移到D:\Temp\Nginx\Installer\nginx-1.23.3\html文件夹下;
  2. 修改配置为(只列出了相关部分)

    server {
     listen       90;
     server_name  localhost;
    
     root  html;
    
     location / {
         index  index.html;
     }
    }

加一句 try_files $uri $uri/ /index.html; 试试

server {
        listen       90;
        server_name  localhost;
        location /demo {
            root   demo;
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }
    }
  server {
        listen       70;
        server_name  localhost;
        location / {
            root   D:/Temp/Nginx/Installer/nginx-1.23.3;
            index  index.html index.htm;
        }
    }

因为已经将目录设置在nginx所在根目录了,所以需要绝对路径了。如果将demo文件夹放到html目录下面,那么root可以设置为html

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题