我已经尝试让它工作几个小时了!
我想建立一个简单的网络服务器。我的网络文件应位于/var/www
.我也想要 phpmyadmin。我创建了一个目录/var/phpmyadmin
。现在我想以标准方式访问普通的网页文件。
例如:该文件/var/www/test.php
应该可以通过http://localhost/test.php
.
phpmyadmin 部分应该像这样访问:http://localhost/phpmyadmin
。通过下面的配置,我得到了 404。还有这个 URL:http://localhost/phpmyadmin/index.php
为此,我在 nginx 的 site-availble 文件夹中创建了此文件:
server {
listen 80; ## listen for ipv4; this line is default and implied
listen [::]:80 default_server ipv6only=on; ## listen for ipv6
root /var/www;
index index.html index.htm index.php;
try_files $uri $uri/ $uri/index.html $uri/index.htm $uri/index.php;
# This didn't work
location /phpmyadmin/ {
alias /var/phpmyadmin;
}
# And this did neither. (Never used both at the same time!)
location /phpmyadmin/ {
root /var;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
我究竟做错了什么?
编辑:
有趣的是,这是有效的(根目录有效(http://localhost
)):
root /var/www/htdocs;
index index.php index.html index.htm;
location /phpmyadmin/ {
root /var/www/phpmyadmin;
}
而这并没有:
index index.php index.html index.htm;
location / {
root /var/www/htdocs;
}
location /phpmyadmin/ {
root /var/www/phpmyadmin;
}
phpmyadmin 还是不行!
答案1
您的目标是将您的“常规”Web 文件与您的 phpMyAdmin 安装完全分离。
应该强调的是,Nginx 中的每个服务器配置可以(并且应该)只有一个 webroot。话虽这么说,这些是您的选择:
将 phpMyAdmin 安装在您的 webroot 下的目录中,在您的例子中是
/var/www/phpmyadmin
.可以通过以下方式访问它http://localhost/phpmyadmin
这是最简单的配置,为了完整起见,我将其包含在此处(以及来自搜索引擎的人们)。
将 phpMyAdmin 安装在 webroot 之外的目录中,然后创建一个
phpmyadmin
在 webroot 中命名的指向该目录的符号链接。在这种情况下,您需要确保已disable_symlinks off
在服务器配置中指定。您可以通过创建 2 个监听不同端口、具有不同 Webroot 并通过 proxy_pass 指令进行通信的服务器配置来实现同一虚拟主机上的分离。这种配置的基本概要如下:
server { listen 80; server_name localhost; root /var/www/htdocs; index index.php index.html index.htm; location /phpmyadmin { proxy_pass http://127.0.0.1:8080/; } # ...Add more location directives, php support, etc... } server { listen 8080; server_name localhost; root /var/www/phpmyadmin; index index.php index.html index.htm; # ...Specify additional location directives, php support, etc... }
在这种情况下,对 phpMyAdmin 的所有请求都将通过侦听端口 80 的服务器实例中的位置透明地传递到
/phpmyadmin
侦听端口 8080 的服务器实例。最后,您可以通过创建侦听同一端口但具有不同
server_name
指令和不同root
位置的 2 个服务器配置来实现不同虚拟主机上的分离。例如,这样的基本轮廓:server { listen 80; server_name dev.local; root /var/www/htdocs; index index.php index.html index.htm; # ...Add more location directives, php support, etc... } server { listen 80; server_name phpmyadmin.local; root /var/www/phpmyadmin; index index.php index.html index.htm; # ...Specify additional location directives, php support, etc... }
然后,您可以继续将以下条目添加到您的/etc/hosts
:
127.0.0.1 dev.local
127.0.0.1 phpmyadmin.local
然后您可以通过 访问您的文件http://dev.local
并通过 phpMyAdmin 实例访问您的文件http://phpmyadmin.local
。显然,来自您的本地工作站。