多个网站中的Nginx反向代理和根问题

时间:2018-09-07 15:56:03

标签: nginx ubuntu-16.04

我有一个服务器的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”

1 个答案:

答案 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-avalableconf.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,可能会发生很多事情。