Debian

具有多個位置的 nginx 伺服器配置不起作用

  • October 22, 2014

我一直在努力讓它工作幾個小時!

我想建立一個簡單的網路伺服器。我的網路文件應在/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. 顯然,從您的本地工作站。

引用自:https://unix.stackexchange.com/questions/134087