Debian
具有多個位置的 nginx 伺服器配置不起作用
我一直在努力讓它工作幾個小時!
我想建立一個簡單的網路伺服器。我的網路文件應在
/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 的 sites-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 還是不行!
您的目標是將“正常”Web 文件與 phpMyAdmin 安裝完全分開。
需要強調的是,Nginx 中的每個伺服器配置可以(並且應該)只有一個 webroot。話雖如此,這些是您的選擇:
- 在您的 webroot 下的目錄中安裝 phpMyAdmin,在您的情況下是
/var/www/phpmyadmin
. 它可以通過http://localhost/phpmyadmin
這是最簡單的配置,為了完整起見,我將其包括在此處(以及來自搜尋引擎的人們)。
- 將 phpMyAdmin 安裝在您的 webroot 之外的目錄中,然後
phpmyadmin
在您的 webroot 中創建一個指向該目錄的符號連結。在這種情況下,您需要確保已disable_symlinks off
在伺服器配置中指定。- 您可以通過創建 2 個伺服器配置來偵聽不同的埠、具有不同的 webroot 並通過 proxy_pass 指令進行通信,從而在同一個 vhost 上實現分離。這種配置的基本概要如下:
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
在這種情況下,所有對 phpMyAdmin 的請求都將通過監聽埠 80 的伺服器實例中的位置透明地傳遞給監聽埠 8080的伺服器實例。
server_name
最後,您可以通過創建 2 個在同一埠上偵聽但具有不同指令和不同root
位置的伺服器配置來實現不同虛擬主機的分離。例如,這樣的基本大綱: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
通過http://phpmyadmin.local
. 顯然,從您的本地工作站。