首先,如果我的英语不是很好,如果我没有正确理解任何单词,我深感抱歉。
我正在尝试为位于不同位置的两个项目提供服务,这两个项目位于同一台机器上。我想使用单个 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/phpmyadmin
和location
为/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 文档建议不要这么做。