2017-01-18 4 views
8

У меня проблема с моей конфигурацией Nginx. У меня есть 2 сервера, один с nginx и один с моим webApp в symfony3. Вот моя конфигурация:Обслуживание удаленных статических файлов с 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; 

} 

работы сайта для всех сценариев PHP, но все активы (статические файлы) могут быть битые файлы. Я недостаточно понимаю, как Nginx работает, чтобы указать, какие статические файлы и «рассказать» мой прокси, что они не являются скриптами.

+0

Попробуйте изменить 'include fastcgi_params' для' include fastcgi.conf' и удалить 'fastcgi_param', который вы установили. Вместо этого добавьте 'fastcgi_split_path_info^(. + \. Php) (/.*) $;'. По-моему, пути, которые вы проходите, вероятно, ошибаются, поэтому все работает частично. У меня есть «php-fpm» и «nginx» с обратным прокси-сервером, и он работает нормально. – tftd

+0

@JeanDoux, надеюсь, вы найдете мой ответ полезным и сохраните свою долю щедрости; иначе, не стесняйтесь, дайте мне знать, если что-то неясно, и я был бы рад подключить оставшиеся точки, если они есть. – cnst

ответ

7

Директива try_files автоматически пытается найти статические файлы и обслуживать их как статические, до сдачи и предоставления запроса в качестве сценария.

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

    проверяет существование файлов в заданном порядке и использует первый найденный файл для обработки запроса; обработка выполняется в текущем контексте. Путь к файлу создается из параметра файла в соответствии с директивами root и alias. Можно проверить существование каталога, указав косую черту в конце имени, например. «$ URI /». Если ни один из файлов не найден, создается внутренняя переадресация uri, указанная в последнем параметре.

Обратите внимание, что, хотя вы уже используете try_files, кажется, что, возможно, ваш путь обработки не до спецификации.


Что касается вашего собственного ответа с временным решением, there's nothing wrong with using a rewrite or two, но сказали, это выглядит, как вы бы извлечь выгоду из alias директивы.

Однако, вы никогда не объясняет, почему вы обслуживаете вещи из /tmp. Обратите внимание, что /tmp часто автоматически очищается с помощью некоторых сценариев cron, например., на OpenBSD скрипт /etc/daily автоматически установит find и удалит файлы старше 7 дней (on a daily basis, как следует из названия).


В заключение, вы должны сначала выяснить, что соответствующее отображение между веб-просмотра файловой системы и файловой системы.

Впоследствии, если префикс найден, просто используйте отдельный код location для активов вместе с alias.

Else, выяснить пути для try_files для работы в соответствии с назначением.

1

меня найти очень некрасиво решение, пока кто-найти лучшее решение, вот что я сделал:

  • Я скопировал все хранилища активов и скопировать его в мой прокси-сервер, на котором Nginx является.

Вот мой новый конфигурационный:

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; 

} 

И теперь он работает, все JS/CSS и изображения найдены.

Если кто-то думает о «более чистом» ответе, он более чем может ответить.

Смежные вопросы