我有一个服务器的IP地址,我想将该网站设置为Frontend和Backend管理员。只是site1部分应该在“ http://IP/”中,site2应该在“ http://IP/admin”中。
我已在服务器中安装了Nginx,并且我的网站文件位于其中:可以这样说:
site1: /var/www/html/site1/index.html
site2: /var/www/html/site2/index.html
我在/ etc / nginx / site-available /中创建了2个文件,分别为“ site1.conf”和“ site2.conf”。
site1.conf:
server {
listen 80;
listen [::]:80;
root /var/www/html/site1;
index index.html index.htm;
server_name http://myIP;
location / {
try_files $uri $uri/ =404;
}
}
site2.conf:
server {
listen 80;
listen [::]:80;
server_name http://myIP;
location /admin {
autoindex on;
alias /var/www/html/site2;
try_files $uri $uri/ /index.html last;
index index.html;
}
}
然后我将这两个文件链接到“ / etc / nginx / site-enabled”
重启Nginx之后,我的“ http://ip/”打开site1“ index.html”并正常工作。
但是“ http://ip/admin/”给出了404错误,而不是打开site2“ index.html”
答案 0 :(得分:0)
http://IP/
和http://IP/admin
都指向具有server_name
“ IP”的同一服务器。
您的服务器包含至少两个location
块。
例如:
server {
listen 80;
listen [::]:80;
server_name 1.2.3.4;
root /var/www/html/site1;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location /admin {
alias /var/www/html/site2;
...
}
}
服务器名称仅包含IP地址或DNS名称的文本。有关更多信息,请参见this document。
您可以将配置分布到任意多个文件中。参见the include
directive。
nginx
配置是一个名为nginx.conf
的文件,并包含一条include
语句,以获取sites-available
目录中的所有文件。这些文件的内容包含在http { ... }
中。
正如我已经说过的,就server { ... }
而言,您的两个服务是一个nginx
块。但是,您仍然可以在server
中创建一个sites-available
阻止文件,其中包含来自其他位置的文件。只是不要使用sites-avalable
或conf.d
,因为nginx
在使用这些目录名时比较麻烦。
例如:
在sites-available/mysites.conf
中:
server {
listen 80;
listen [::]:80;
server_name 1.2.3.4;
include /path/to/my/location/confs/*.conf;
}
在/path/to/my/location/confs/site1.conf
中:
root /var/www/html/site1;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
在/path/to/my/location/confs/site2.conf
中:
location /admin {
alias /var/www/html/site2;
...
}
我并不是说这是组织文件的好方法,但是使用nginx
,可能会发生很多事情。