2015-02-13 17 views
6

Tôi đã cố gắng định cấu hình nhiều ứng dụng web trên máy chủ web nginx của mình nhưng tôi không thể làm việc với ứng dụng Laravel yêu cầu $ document_root được đặt thành thư mục công khai laravel. Tôi hiện đang cố gắng định cấu hình nó bằng cách sử dụng chỉ thị bí danh nhưng vì một lý do không rõ ràng điều này không hoạt động. Đây là những gì tôi đang cố gắng làm.Làm thế nào để cấu hình đúng chỉ thị bí danh trong nginx?

# Default server configuration 
# 
server { 
    listen 80; 

    # SSL configuration 
    # 
    listen 443 ssl; 

    error_log /var/log/nginx/error.log warn; 

    ssl_certificate /etc/nginx/ssl/server.crt; 
    ssl_certificate_key /etc/nginx/ssl/server.key; 


    set $root_path '/var/www/html'; 
    root $root_path; 

    # Add index.php to the list if you are using PHP 
    index index.html index.htm index.nginx-debian.html index.php; 

    server_name localhost; 

    location /paperwork { 
     alias /var/www/html/paperwork/frontend/public; 
     try_files $uri $uri/; 
     #location ~ \.php { 
     # fastcgi_split_path_info ^(.+\.php)(.*)$; 
     # fastcgi_pass unix:/var/run/php5-fpm.sock; 
     # include /etc/nginx/fastcgi_params; 
     # #fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; 
     # #fastcgi_intercept_errors on; 
     #} 
    } 

    #location @paperwork { 
    # rewrite /paperwork/(.*)$ /paperwork/index.php/$1 last; 
    #} 

    location/{ 

    } 


    location /wallabag { 
     try_files $uri $uri/ /index.php; 
    } 

    location /laverna { 
     try_files $uri/ /index.php; 
    } 

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
    # 
    location ~ \.php$ { 
     # With php5-cgi alone: 
     #fastcgi_pass 127.0.0.1:9000; 
     # With php5-fpm: 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     #try_files $uri $uri/ =404; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     include fastcgi_params; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    } 



    # deny access to .htaccess files, if Apache's document root 
    # concurs with nginx's one 

    location ~ /\.ht { 
     deny all; 
    } 
} 

Để kiểm tra "bí danh" của tôi cấu hình tôi đặt một file 'test.php' trong /var/www/html/paperwork/frontend/public/test.php và cố gắng để truy cập nó thông qua https://IP/paperwork/test.php. Tôi gặp lỗi 404 và không có gì trong nhật ký lỗi nginx. Nếu tôi thử https://IP/paperwork/frontend/public/test.php trong trình duyệt, nó sẽ hiển thị tệp test.php mà không có lỗi. Không có gì thay đổi nếu tôi bỏ ghi chú dòng try_files ở vị trí php.

Nếu tôi sao chép test.php vào /var/www/html/paperwork/test2.php và truy cập https://IP/paperwork/test2.php tệp được hiển thị không có lỗi để tôi có thể thấy ở đây bí danh đó không hoạt động vì không có test2. php trong thư mục công cộng giấy tờ.

Tôi có thể có hành vi khác nếu tôi bỏ ghi chú vị trí php bên trong vị trí giấy tờ. Với điều này, các yêu cầu như https://IP/paperwork/test.php không hiển thị 404 nhưng màn hình trống.

Tôi đã trải qua rất nhiều diễn đàn/câu hỏi liên quan đến điều này, nhưng tôi không thể có được một cấu hình làm việc cho một công việc đơn giản như hiển thị test.php ...

Cảm ơn!

Trả lời

19

Tôi đã tìm thấy giải pháp. Có vẻ như một yêu cầu sai đã được gửi cho các tệp php. Khi sử dụng bí danh, bạn nên sử dụng $ request_filename thay vì $ fastcgi_script_name.

Đây là khối vị trí của tôi:

location /paperwork { 

     alias /var/www/html/paperwork/frontend/public; 
     #try_files $uri $uri/; 
     location ~ \.php$ { 
      fastcgi_pass unix:/var/run/php5-fpm.sock; 
      include fastcgi_params;      
      fastcgi_param SCRIPT_FILENAME $request_filename; 
      #fastcgi_intercept_errors on; 
     } 
} 

này giải quyết vấn đề của tôi cho file 'test.php' của tôi mà hiện nay được thực hiện đồng thời vẫn đạt https://IP/paperwork/test.php. Vì vậy, bí danh đang hoạt động và php được thực hiện tốt. Tôi vẫn gặp sự cố khi cố gắng truy cập 'index.php' (đó là chỉ mục ứng dụng laravel của tôi). File được tìm thấy nhưng thay vì thực thi nó được tải xuống. Vì vậy, khi tôi đạt đến https://IP/paperwork/index.php tôi nhận được tệp đăng nhập được tải xuống là tệp index.php. Tôi nhận được hành vi tương tự nếu tôi thử /paperwork/index.php/login hoặc/paperwork/login.

+2

Điều này đã khiến tôi bối rối trong nhiều tháng, cảm ơn. – demure

+1

Có! cảm ơn bạn. Khóa đã sử dụng '$ request_filename'. Mỗi ví dụ khác có 'fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name' nhưng không hiệu quả. – heisian

Các vấn đề liên quan