2014-10-01 4 views
0

Ugh, пытающийся получить NGINX/php-fpm, чтобы играть красиво с SF 1.4 в течение нескольких дней, и не может показаться, что он прибил правильную конфигурацию. Я последовал за nginx symfony guide, а как это SO post, но ни помогло, и я подозреваю, что это может быть потому, что они были настроены против старых версий NGINX (я работаю с 1.6.2)NGINX + php-fpm + Symfony 1.4 = :(

Вот мой конфиг:.

server { 

    listen 51000; 

    server_name example.mpurcell.dev.example.com; 
    access_log /tmp/access.log; 
    error_log /tmp/error.log notice; 
    root /home/mpurcell/projects/j1n/app/example/current/code/web/; 

    index index.php; 

    location ~ ^/(app|app_dev)(/|$) { 
     rewrite ^(.*)$ $1.php last; 
    } 

    location ~ ^/(app|app_dev).php(/|$) { 

     try_files $uri =404; 

     include /etc/nginx/fastcgi_params; 

     fastcgi_split_path_info ^(.+?\.php)(/.*)$; 

     if (!-f $document_root$fastcgi_script_name) { 
       return 404; 
     } 

     fastcgi_param SERVICE_ENV 'dev'; 
     fastcgi_param HTTPS off; 

     # http://wiki.nginx.org/Symfony 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     fastcgi_param SCRIPT_NAME $fastcgi_script_name; 
     fastcgi_param PATH_INFO $fastcgi_path_info; 

     fastcgi_pass unix:/var/run/php-fpm.sock; 
    } 
} 

И различные ответы:

$ -> curl -v 10.0.0.7:51000 

# Expected 
< HTTP/1.1 301 Moved Permanently 
< Server: nginx/1.6.2 
< Date: Wed, 01 Oct 2014 23:34:10 GMT 
< Content-Type: text/html 
< Transfer-Encoding: chunked 
< Connection: keep-alive 
< Location: /app 

$ -> curl -v 10.0.0.7:51000/app.php 

# Expected 
< HTTP/1.1 200 OK 
< Server: nginx/1.6.2 
< Date: Wed, 01 Oct 2014 23:37:48 GMT 
< Content-Type: text/html; charset=utf-8 
< Transfer-Encoding: chunked 
< Connection: keep-alive 
< Cache-Control: private 

$ -> curl -v 10.0.0.7:51000/app 

# Not expected, the script executes but SF throws a 404 with the following error 
# Empty module and/or action after parsing the URL "/app" (/). 
< HTTP/1.1 404 Not Found 
< Server: nginx/1.6.2 
< Date: Wed, 01 Oct 2014 23:39:09 GMT 
< Content-Type: text/html; charset=utf-8 
< Transfer-Encoding: chunked 
< Connection: keep-alive 
< Cache-Control: private 

И он уверен, выглядит как правило переписывания из ВХост конфигурации работает:

2014/10/01 23:40:30 [notice] 9668#0: *13 "^(.*)$" matches "/app", client: 10.0.0.3, server: example.mpurcell.dev.example.com, request: "GET /app HTTP/1.1", host: "dev-a-2:51000" 
2014/10/01 23:40:30 [notice] 9668#0: *13 rewritten data: "/app.php", args: "", client: 10.0.0.3, server: example.mpurcell.dev.example.com, request: "GET /app HTTP/1.1", host: "dev-a-2:51000" 

И ради Комплектность, то cgi.fix_pathinfo по умолчанию (= 1), и я не хочу, чтобы установить это значение 0.

Кроме того, следует отметить, что для контроллера приложения relative_url_root установлена ​​пустая строка, так как она находится в корневом каталоге.

Stack:

nginx 1.6.2 
php-fpm 5.4.33 
php 5.4.33 
+0

Проверьте, что ваша конфигурация предназначена для правильной версии фреймворка: если вы используете sf 1.4, вы публикуете конфигурацию для sf 2.x (app * .php является типичным для sf2.x и frontend * .php backendé.php является типичным для sf1.4). надеюсь эта помощь. – Matteo

+0

Ссылки, которые я разместил, были в SF2, но в той же ссылке была ссылка на конфигурацию 1.4 NGINX, которую я попытался использовать, но не работал. Для моего проекта SF1 я использую контроллеры app, admin, api вместо lame fe и контроллеры. –

ответ

0

Так что я, наконец, получил Symfony и PHP-FPM, чтобы хорошо играть друг с другом, и один большой кусок этой головоломки в том, чтобы поменять местами out apache для nginx. IMO, синтаксис перезаписи для nginx> apache. Так вот пример моей текущей конфигурации приложения сервера:

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

location /admin { 
    rewrite ^/admin/(.*)$ /admin/index.php/$1 last; 
} 

location /app { 
    rewrite ^/app/(.*)$ /index.php/$1 last; 
} 

location ~ index\.php { 
    ... 
} 

Я должен создать суб директорий для каждого контроллера в веб-директории, например:

/web 
    index.php 
    app.php 
    admin.php 

/web 
    /app/index.php 
    /admin/index.php 

У меня был этот конфиг в prod сейчас около 2 месяцев с 0 проблемами, так что, надеюсь, это помогает другим симфонистам старой школы.

0

Я думаю, ваша проблема в том, что вы не сказали Nginx, где Symfony есть. Я привел пример конфигурации nginx, которую я использую в настоящее время.

server { 
    listen 80; 

    server_name example.com; 
    chunked_transfer_encoding on; 
    proxy_buffering off; 

    charset utf-8; 

    root /home/mpurcell/projects/j1n/app/example/current/code/web; 
    access_log /tmp/access_log; 
    error_log /tmp/error_log; 

    location /sf/ { 
    expires max; 
    root /home/mpurcell/projects/j1n/app/example/current/code/lib/vendor/symfony/data/web/; 
    } 

    location ~ ^/(index|frontend_dev|backend_dev)\.php($|/) { 
    set $script $uri; 
    set $path_info ""; 

    if ($uri ~ "^(.+\.php)(/.*)") { 
     set $script  $1; 
     set $path_info $2; 
    } 

    include fastcgi_params; 
    fastcgi_param PATH_INFO   $path_info; 
    fastcgi_param SCRIPT_FILENAME $document_root$script; 
    fastcgi_param SCRIPT_NAME  $script; 
    fastcgi_param HTTPS off; 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_keep_conn on; 
    fastcgi_intercept_errors on; 
} 

location/{ 
    if (-f $request_filename) { 
    expires max; 
    add_header Pragma public; 
    add_header Cache-Control "public, must-revalidate, proxy-revalidate"; 
    break; 
    } 
    if ($request_filename ~ ".(js|htc|ico|gif|jpg|png|css)$") { 
    expires max; 
    add_header Pragma public; 
    add_header Cache-Control "public, must-revalidate, proxy-revalidate"; 
    break; 
    } 
    index index.php; 
    try_files $uri /index.php?$args; 
    } 
} 

Для вас проблемы, я думаю, что ключ заключается в следующем:

location /sf/ { 
    expires max; 
    root /home/mpurcell/projects/j1n/app/example/current/code/lib/vendor/symfony/data/web/; 
    } 
Смежные вопросы