Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

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"
share|improve this question
add comment

2 Answers

up vote 2 down vote accepted
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".

share|improve this answer
    
AWESOME! Thank you sooo much! It works –  Evils Feb 12 '13 at 8:20
add comment

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

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.