0

I'm trying to make my Zend2 Application to work with Nginx instead of Apache.

I googled the WWW for a solution but haven't found a thing regarding Zend 2 and Nginx, all I found were some old old post on how to make the older zend (1) framework work with nginx.

As with all the new zend 2 application I tried to point my nginx config to /projectdir/public and I tried several other ways with making a symbolic link from /projectdir/public to /usr/share/nginx/www but it just won't work.

PHP5FPM is installed and configured, phpinfo() works.

This is how my last try on making things work looks like...

Here's my /etc/nginx/sites-available/default

server {
    listen   80; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default_server ipv6only=on; ## listen for ipv6

    root /usr/share/nginx/www/;
    index index.php index.html index.htm;

    # Make site accessible from http://localhost/
    server_name _;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ /index.html;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }

    location /doc/ {
        alias /usr/share/doc/;
        autoindex on;
        allow 127.0.0.1;
        allow ::1;
        deny all;
    }

    # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
    #location /RequestDenied {
    #   proxy_pass http://127.0.0.1:8080;    
    #}

    error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    #location = /50x.html {
    #   root /usr/share/nginx/www;
    #}

    #pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

    # With php5-cgi alone:
    #   fastcgi_pass 127.0.0.1:9000;
        # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /home/evils/projects/zendCodeGit/public$fastcgi_script_name;
        include fastcgi_params;
    }

}

I already tried to put in an extra location /public/ with the right root, but I think I'm missing either some configuration work or something else.

I already executed the php composer.phar install command.

OS is Ubuntu 12.04

Edit:

Here's the last error log

    2013/02/09 14:57:47 [error] 10140#0: *1 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught exception 'Zend\Uri\Exception\InvalidUriPartException' with message 'Host "_" is not valid or is not accepted by Zend\Uri\Http' in /home/evils/projects/zendCodeGit/vendor/zendframework/zendframework/library/Zend/Uri/Uri.php:729
Stack trace:
#0 /home/evils/projects/zendCodeGit/vendor/zendframework/zendframework/library/Zend/Http/PhpEnvironment/Request.php(285): Zend\Uri\Uri->setHost('_')
#1 /home/evils/projects/zendCodeGit/vendor/zendframework/zendframework/library/Zend/Http/PhpEnvironment/Request.php(85): Zend\Http\PhpEnvironment\Request->setServer(Object(Zend\Stdlib\Parameters))
#2 /home/evils/projects/zendCodeGit/vendor/zendframework/zendframework/library/Zend/Mvc/Service/RequestFactory.php(38): Zend\Http\PhpEnvironment\Request->__construct()
#3 [internal function]: Zend\Mvc\Service\RequestFactory->createService(Object(Zend\ServiceManager\ServiceManager), 'request', 'Request')
#4 /home/evils/projects/zendCodeGit/vendor/zendframework/zendframework/library/Zend/Serv" while reading response header from upstream, client: 10.211.55.2, server: _, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "10.211.55.10"
2013/02/09 14:57:48 [error] 10140#0: *1 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught exception 'Zend\Uri\Exception\InvalidUriPartException' with message 'Host "_" is not valid or is not accepted by Zend\Uri\Http' in /home/evils/projects/zendCodeGit/vendor/zendframework/zendframework/library/Zend/Uri/Uri.php:729
Stack trace:
#0 /home/evils/projects/zendCodeGit/vendor/zendframework/zendframework/library/Zend/Http/PhpEnvironment/Request.php(285): Zend\Uri\Uri->setHost('_')
#1 /home/evils/projects/zendCodeGit/vendor/zendframework/zendframework/library/Zend/Http/PhpEnvironment/Request.php(85): Zend\Http\PhpEnvironment\Request->setServer(Object(Zend\Stdlib\Parameters))
#2 /home/evils/projects/zendCodeGit/vendor/zendframework/zendframework/library/Zend/Mvc/Service/RequestFactory.php(38): Zend\Http\PhpEnvironment\Request->__construct()
#3 [internal function]: Zend\Mvc\Service\RequestFactory->createService(Object(Zend\ServiceManager\ServiceManager), 'request', 'Request')
#4 /home/evils/projects/zendCodeGit/vendor/zendframework/zendframework/library/Zend/Serv" while reading response header from upstream, client: 10.211.55.2, server: _, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "10.211.55.10"
Evils
  • 117
  • 2
  • 9

2 Answers2

2
PHP message: PHP Fatal error:  Uncaught exception 'Zend\Uri\Exception\InvalidUriPartException' with message 'Host "_" is not valid or is not accepted by Zend\Uri\Http

Zend doesn't like your server_name:

server_name _;

Change it to something else like "localhost".

mgorven
  • 30,615
  • 7
  • 79
  • 122
0

A more general solution would be:

fastcgi_param   SERVER_NAME $host;

This way, SERVER_NAME would actually hold the value of the host header from the request. This is also useful when you have multiple server names defined or you are using wildcards