dự án nginx trong thư mục con


10

Tôi cảm thấy thất vọng với cấu hình nginx của mình và vì vậy tôi đang yêu cầu trợ giúp trong việc viết tệp cấu hình của mình để phục vụ nhiều dự án từ các thư mục con trong cùng một root. Đây không phải là lưu trữ ảo vì tất cả đều sử dụng cùng một giá trị máy chủ. Có lẽ một ví dụ sẽ làm rõ nỗ lực của tôi:

  • yêu cầu 192.168.1.1/nên phục vụ index.phptừ/var/www/public/
  • yêu cầu 192.168.1.1/wiki/nên phục vụ index.phptừ/var/www/wiki/public/
  • yêu cầu 192.168.1.1/blog/nên phục vụ index.phptừ/var/www/blog/public/

Các dự án này đang sử dụng PHP và sử dụng fastcgi.

Cấu hình hiện tại của tôi là rất tối thiểu.

server {
    listen 80 default;
    server_name localhost;

    access_log /var/log/nginx/localhost.access.log;

    root /var/www;
    index index.php index.html;

    location ~ \.php$ {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /var/www$fastcgi_script_name;
        include fastcgi_params;
    }
}

Tôi đã thử nhiều thứ với aliasrewritenhưng không thể đặt mọi thứ chính xác cho fastcgi. Có vẻ như không nên có một cách hùng hồn hơn viết khối vị trí và nhân đôi root, index, SCRIPT_FILENAMEvv

Bất kỳ con trỏ để đưa tôi đi đúng hướng được đánh giá cao.


Vì tò mò, URL nào bạn muốn có thể truy cập vào tệp /var/www/public/wiki/foo.html tại?
natacado

Đó là một điểm tốt, natacado. thư mục công cộng chính sẽ chỉ là một vài tệp linh tinh và dù sao cũng không bao giờ thực sự được sử dụng. Đó là một thiết lập nội bộ vì vậy tôi sẽ kiểm soát điều đó. Hy vọng chúng ta sẽ không phải tìm hiểu :)
Timothy

Câu trả lời:


16

Vì các dự án của bạn không thực sự nằm trong cùng một root, bạn phải sử dụng nhiều vị trí cho việc này.

location /wiki {
    root /var/www/wiki/public;
}

location ~ /wiki/.+\.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME /var/www/wiki/public$fastcgi_script_name;
}

location /blog {
    root /var/www/blog/public;
}

location ~ /blog/.+\.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME /var/www/blog/public$fastcgi_script_name;
}

Ngoài ra, hãy đặt fastcgi_index vào tệp fastcgi_params của bạn và đưa nó ở cấp máy chủ, theo cách đó bạn giữ các vị trí php của mình nhỏ nhất có thể.


1
Đây chính xác là loại cấu hình mà tôi đã hy vọng tránh ... trùng lặp. Than ôi, nếu điều này là "đúng" hơn đó là những gì tôi sẽ làm. Cảm ơn sự giúp đỡ của bạn, Martin!
Ti-mô-thê

7

Giải quyết theo vị trí + bí danh:


location / {
   root /var/www/public;
   index index.php;
}
location /blog/ {
   alias /var/www/blog/public/;
   index index.php;
}
location /wiki/ {
   alias /var/www/wiki/public/;
   index index.php;
}

location ~ \.php$ {
   #your fastcgi configuration here 
}


0

Đây là những gì tôi đã cố gắng, chi tiết hơn tại http://programmersjunk.blogspot.com/2013/11/nginx-mult Môn-sites-in-subdirectories.html

    location /Site1/ {
            root /usr/share/nginx/www/Site1;
           try_files $uri $uri/ /index.php?$query_string;
    }

    # the images need a seperate entry as we dont want to concatenate that with index.php      
    location ~ /Site1/.+\.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
            root /usr/share/nginx/www/Site1;
    }
    # pass the PHP scripts to FastCGI server
    location ~ /Site1/.+\.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            allow 127.0.0.1;
    #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    #       # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_index index.php;
    }

location /Site3/ {
            root    /usr/share/nginx/www/Site3;
    }

    # pass the PHP scripts to FastCGI server
    location ~ /Site3/.+\.php$ {
            allow 127.0.0.1;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            include fastcgi_params;
            #we are directly using the $request_filename as its a single php script
            fastcgi_param SCRIPT_FILENAME $request_filename;
    }
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.