使用相同 IP 和端口为两个项目提供服务时,Nginx 出现错误

使用相同 IP 和端口为两个项目提供服务时,Nginx 出现错误

首先,如果我的英语不是很好,如果我没有正确理解任何单词,我深感抱歉。

我正在尝试为位于不同位置的两个项目提供服务,这两个项目位于同一台机器上。我想使用单个 IP 和端口调用这两个项目,但使用不同的目录:

  • Test.example.com/advanceerp
  • Test.example.com/phpmyadmin

设置应该非常简单。我明白了nginx给我看看项目1毫无问题,但在尝试服务时项目2表示 404 错误。如果我检查日志,我会看到当它尝试为该项目提供服务时,它正在查看名为 advance 的项目的根目录...我在我的服务器上配置了两个虚拟主机已启用站点如下:

server {

    listen 80;
    listen [::]:80;

    root /var/www/;

    # Add index.php to the list if you are using PHP
    index index.php index.html index.htm index.nginx-debian.html;

    server_name test.example.com;

    location /advanceerp {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.1-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

server {

    listen 80;
    listen [::]:80;

    root /usr/share/phpmyadmin;

    # Add index.php to the list if you are using PHP
    index index.php index.html index.htm index.nginx-debian.html;

    server_name test.example.com;

    location /phpmyadmin {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri =404;
    }

    location ~ \.php$ {

        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

我有短暂的时间使用nginx,所以我明白这肯定是初学者的错误,请不要记住我;)最简单的方法是什么? 提前致以亲切的问候和感谢。


是的,我只是简化了 sites-enabled 的配置。保留一个文件并在其中配置指向不同项目的几个位置...这对我也不起作用,它显示 404 错误。

Server {

    Listen 80;
    Listen [::]: 80 ipv6only = on;

    Index.php index.html index.htm index.nginx-debian.html;

    Root / var / www / html;
    Server_name test.fasttracknet.es;

    Location / {
        Try_files $ uri = 404;
    }

    Location / advanceerp {
        root /var/www;
        Try_files $ uri $ uri / = 404;
    }

    Location /phpmyadmin {
        root /usr/share/phpmyadmin;
        Try_files $ uri $ uri / = 404;
    }

    Location ~ \ .php $ {
        Include snippets / fastcgi-php.conf;
        Fastcgi_pass unix: /run/php/php7.0-fpm.sock;
    }

    Location ~ /\.ht {
        Deny all;
    }
}

答案1

您的配置有效test.example.com,因此http://test.example.com/phpmyadmin指向/usr/share/phpmyadmin/phpmyadmin

它之所以能如此工作,是因为您已指定root/usr/share/phpmyadminlocation/phpmyadmin。nginx 将的值附加到location的值中,root以确定文件的位置。

对于您来说,我将使用以下配置test.example.com

server {
    listen 80;
    listen [::]:80;

    root /path/to/empty/dir;

    # Add index.php to the list if you are using PHP
    index index.php index.html index.htm index.nginx-debian.html;

    server_name test.example.com;

    location /phpmyadmin {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        alias /usr/share/phpmyadmin;
        try_files $uri =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

在这里我们使用alias指令来指定精确的文件系统路径location /phpmyadmin

是您想要在访问/path/to/empty/dir时显示的目录。http://test.example.com

答案2

root两个服务器的块中都有该指令server,因此第二个条目将覆盖第一个。

root你的 apache 的指令移到location块中:

server {
    server_name test.example.com;
    root /var/www/;
}

server {
    server_name test.example.com;
    location /phpmyadmin {
        root /usr/share/phpmyadmin;
    }
}

注意:您可能想将所有root指令移到其location块中,但是nginx 文档建议不要这么做

相关内容