2017-01-18 15 views
8

Tôi gặp sự cố với cấu hình Nginx của mình. Tôi có 2 máy chủ, một với nginx và một với webApp của tôi trong symfony3. Dưới đây là cấu hình của tôi:Cung cấp các tệp tĩnh từ xa với symfony3

location /portal/mysite/ { 

    set $frontRoot /srv/data/apps/mysite-portal-stag/current/web; 
    set $sfApp app.php; # Change to app.php for prod or app_dev.php for dev 

    root /srv/data/apps/mysite-portal-stag/current/web; 

    rewrite ^/portal/mysite/(.*)$ /$1 break; 
    try_files $uri @sfFront; 

} 
location @sfFront { 

    root /srv/data/apps/mysite-portal-stag/current/web; 

    fastcgi_pass myserver:myport; 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $frontRoot/$sfApp; 

    fastcgi_param SCRIPT_NAME /portal/mysite/$sfApp; 

} 

trang web làm việc cho tất cả các script php nhưng tất cả các tài sản (các file tĩnh) là các tập tin bị hỏng. Tôi không hiểu đủ cách Nginx hoạt động để chỉ ra các tệp tĩnh là gì và "nói" proxy của tôi rằng chúng không phải là tập lệnh.

+0

Hãy thử thay đổi 'include fastcgi_params' thành' include fastcgi.conf' và xóa 'fastcgi_param's bạn đã đặt. Thay vào đó, hãy thêm 'fastcgi_split_path_info^(. + \. Php) (/.*) $;'. Theo tôi, những con đường bạn đang đi có lẽ sai, đó là lý do tại sao mọi thứ hoạt động một phần. Tôi có 'php-fpm' và' nginx' với proxy ngược và nó hoạt động tốt. – tftd

+0

@JeanDoux, tôi hy vọng bạn tìm thấy câu trả lời của tôi hữu ích và giữ cho một phần của bạn của món hời tiền thưởng; khác, hãy cho tôi biết nếu có điều gì không rõ ràng và tôi rất vui khi kết nối các dấu chấm còn sót lại, nếu có. – cnst

Trả lời

7

Chỉ thị try_files tự động tìm cách tìm tệp tĩnh và phân phối chúng tĩnh, trước khi từ bỏ và cho phép yêu cầu được phân phối dưới dạng tập lệnh.

  • http://nginx.org/r/try_files

    Kiểm tra sự tồn tại của tập tin trong trình tự quy định và sử dụng các tập tin tìm thấy đầu tiên cho chế biến theo yêu cầu; quá trình xử lý được thực hiện trong ngữ cảnh hiện tại. Đường dẫn đến tệp được xây dựng từ tham số tệp theo chỉ thị gốc và bí danh. Có thể kiểm tra sự tồn tại của thư mục bằng cách chỉ định dấu gạch chéo ở cuối tên, ví dụ: “$ Uri /”. Nếu không tìm thấy tệp nào, thì chuyển hướng nội bộ tới uri được chỉ định trong tham số cuối cùng được thực hiện.

Lưu ý rằng mặc dù bạn đã sử dụng try_files, nó xuất hiện rằng có lẽ việc xử lý đường dẫn của bạn là không đến spec.


Đối với câu trả lời của riêng bạn với một giải pháp tạm thời, there's nothing wrong with using a rewrite or two, nhưng những gì đã nói, có vẻ như bạn muốn được hưởng lợi từ các chỉ thị alias.

Tuy nhiên, bạn chưa bao giờ giải thích lý do tại sao bạn đang phục vụ thứ ra khỏi /tmp. Lưu ý rằng /tmp thường được xóa tự động bởi một số tập lệnh cron, ví dụ:, trên OpenBSD, tập lệnh /etc/daily sẽ tự động find và xóa các tệp cũ hơn khoảng 7 ngày (on a daily basis, như tên cho thấy).


Nói tóm lại, trước tiên bạn nên tìm ra các bản đồ phù hợp giữa quan điểm web của hệ thống tập tin và hệ thống tập tin của bạn là gì.

Sau đó, nếu tìm thấy tiền tố, chỉ cần sử dụng location riêng cho nội dung, cùng với alias.

Khác, tìm ra đường dẫn cho try_files để hoạt động như dự định.

1

Tôi có tìm thấy một giải pháp rất xấu xí cho đến khi bất cứ ai tìm thấy một giải pháp tốt hơn, đây là những gì tôi đã làm:

  • tôi đã sao chép tất cả các kho lưu trữ tài sản và sao chép nó vào máy chủ proxy của tôi, nơi nginx là.

Dưới đây là cấu hình mới của tôi:

location /portal/mysite/ { 

    set $frontRoot /srv/data/apps/mysite-portal-stag/current/web; 
    set $sfApp app.php; 

    root /srv/data/apps/mysite-portal-stag/current/web; 

    rewrite ^/portal/mysite/(.*)$ /$1 break; 
    try_files $uri @sfFront; 

} 
location /portal/mysite/asset { 
    root /tmp/mysite/asset; 
    rewrite ^/portal/mysite/asset/(.*)$ /$1 break; 
} 
location @sfFront { 

    set $frontRootWeb /srv/data/apps/mysite-portal-stag/current/web; 
    root /srv/data/apps/mysite-portal-stag/current/web; 

    fastcgi_pass myAdressWeb:myPort; 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $frontRoot/$sfApp; 

    fastcgi_param SCRIPT_NAME /portal/mysite/$sfApp; 

} 

Và bây giờ nó làm việc, tất cả các js/css và hình ảnh được tìm thấy.

Nếu có ai đó nghĩ về câu trả lời "sạch hơn", anh ấy được chào đón nhiều hơn để trả lời.

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