cấu hình máy chủ nginx với nhiều vị trí không hoạt động


7

Tôi đã cố gắng để làm việc này trong nhiều giờ!

Tôi muốn thiết lập một máy chủ web đơn giản. Các tập tin web của tôi sẽ được trong /var/www. Tôi cũng muốn có phpmyadmin. Tôi đã tạo một thư mục /var/phpmyadmin. Bây giờ tôi muốn tích lũy các tệp web bình thường theo cách tiêu chuẩn.
Ví dụ: Các tập tin /var/www/test.phpnên được tích lũy với http://localhost/test.php.
Phần phpmyadmin nên được tích lũy như thế này : http://localhost/phpmyadmin. Với cấu hình bên dưới, tôi nhận được 404. Cũng với URL này:http://localhost/phpmyadmin/index.php

Đối với điều này, tôi đã tạo tập tin này trong thư mục availble của nginx:

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;
  }
}

Tôi đang làm gì sai?

Biên tập:

Điều thú vị cần lưu ý là điều này hoạt động (Thư mục gốc hoạt động ( http://localhost)):

  root /var/www/htdocs;

  index index.php index.html index.htm;

  location /phpmyadmin/ {
    root /var/www/phpmyadmin;
  }

Và điều này không:

  index index.php index.html index.htm;

  location / {
    root /var/www/htdocs;
  }

  location /phpmyadmin/ {
    root /var/www/phpmyadmin;
  }

phpmyadmin vẫn không hoạt động!

Câu trả lời:


9

Mục tiêu của bạn là tách biệt hoàn toàn các tệp web "thông thường" khỏi cài đặt phpMyAdmin của bạn.

Cần nhấn mạnh rằng mỗi cấu hình máy chủ trong Nginx có thể (và nên) chỉ có một webroot. Điều đó đang được nói, đây là những lựa chọn của bạn:

  • Cài đặt phpMyAdmin trong một thư mục dưới webroot của bạn, trong trường hợp của bạn là /var/www/phpmyadmin. Nó có thể được truy cập thông quahttp://localhost/phpmyadmin

    Đây là cấu hình đơn giản nhất và tôi bao gồm nó ở đây vì mục đích hoàn chỉnh (và mọi người đến đây từ các công cụ tìm kiếm).

  • Cài đặt phpMyAdmin trong một thư mục bên ngoài webroot của bạn và sau đó tạo một liên kết tượng trưng có tên phpmyadmintrong webroot của bạn trỏ đến thư mục đó. Trong trường hợp đó, bạn cần đảm bảo rằng bạn đã chỉ định disable_symlinks offtrong cấu hình máy chủ của mình.

  • Bạn có thể đạt được sự phân tách trên cùng một vhost bằng cách tạo 2 cấu hình máy chủ lắng nghe trên các cổng khác nhau, có các webroots khác nhau và liên lạc qua chỉ thị proxy_pass. Một phác thảo cơ bản của cấu hình như sau là:

    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...
    }
    

    Trong trường hợp này, tất cả các yêu cầu tới phpMyAdmin sẽ được chuyển một cách trong suốt đến phiên bản máy chủ lắng nghe trên cổng 8080 thông qua /phpmyadminvị trí trong phiên bản máy chủ lắng nghe trên cổng 80.

  • Cuối cùng, bạn có thể đạt được sự phân tách trên các vhost khác nhau bằng cách tạo 2 cấu hình máy chủ nghe trên cùng một cổng, nhưng có các server_namechỉ thị khác nhau và các rootvị trí khác nhau . Ví dụ, một phác thảo cơ bản như thế này:

    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...
    }
    

Sau đó, bạn sẽ tiếp tục và thêm các mục sau vào /etc/hosts:

127.0.0.1    dev.local
127.0.0.1    phpmyadmin.local

và sau đó bạn có thể truy cập các tệp của mình thông qua http://dev.localvà ví dụ phpMyAdmin của bạn thông qua http://phpmyadmin.local. Rõ ràng, từ máy trạm địa phương của bạn.


Vẫn không hoạt động!
BrainStone

Tôi cập nhật câu hỏi của mình với nhiều kết quả hơn từ những nỗ lực của mình để khiến nó hoạt động!
BrainStone

@BrainStone Tôi đã cập nhật câu trả lời của mình. Có vẻ như tôi đã rơi vào một trong những cạm bẫy cấu hình nginx.
dagagasidis

Tôi vẫn muốn giữ các tệp phpmyadmin của mình khỏi thư mục webfiles của mình! Điều này phải có thể!
BrainStone

@BrainStone Bạn có thể thêm một chỉ thị máy chủ mới để nghe trên một cổng khác và có các webroot khác nhau trỏ đến cài đặt phpmyadmin. Sau đó, bạn có thể tạo / phpmyadmin / location bao gồm một lệnh proxy_pass trỏ đến chỉ thị máy chủ mới mà bạn đã tạo có trách nhiệm phục vụ cài đặt phpmyadmin của bạn.
dagagasidis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.