nginx / php7.0-fpm / codeigniter

Coucou,

Je n’arrive pas à configurer nginx pour démarrer un site avec codeigniter. J’ai plusieurs sites qui fonctionnent sur cette machine, mais ce vhost ne fonctionne pas :

[code]server {
listen 80 http2;
listen [::]:80 http2;
server_name xxx;

root /var/www/portail;
autoindex on;
index index.html index.php;

access_log /var/log/nginx/default-access_log combined;
error_log /var/log/nginx/default-error_log debug;

    # set expiration of assets to MAX for caching
    location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
            expires max;
            log_not_found off;
    }

    location / {
            # Check if a file or directory index file exists, else route it to index.php.
            try_files $uri $uri/ /index.php;
    }

    location ~* \.php$ {
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    include snippets/fastcgi-php.conf;
    }

}[/code]

Aucune erreur dans les 2 fichiers de log spécifiés…
Les paramètres fastcgi sont exactement les mêmes pour les 2 autres sites (un nextcloud et un phpmyadmin, qui fonctionnent tous les deux).

Une idée ?

Bises,

Question, est ce qu’un bete fichier PHP genre <?php phpinfo(); fait la même chose ?

Quel est le contenu de /etc/nginx/snippets/fastcgi-php.conf ?

Est ce qu’il y a bien des logs pour ce vhost lors d’une requete ?

Y a-t-il un reverse proxy ?

Ca sent le problème nginx qui sait pas causer en http standard. (ssl invalide, http2 foireu, encodage…)

Oui, un phpinfo, même un bête fichier html donne le même résultat.

[code]vincent@coucou:~$ cat /etc/nginx/snippets/fastcgi-php.conf

regex to split $uri to $fastcgi_script_name and $fastcgi_path

fastcgi_split_path_info ^(.+.php)(/.+)$;

Check that the PHP script exists before passing it

try_files $fastcgi_script_name =404;

Bypass the fact that try_files resets $fastcgi_path_info

see: http://trac.nginx.org/nginx/ticket/321

set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;

fastcgi_index index.php;
include fastcgi.conf;[/code]

[code]vincent@coucou:~$ cat /etc/nginx/fastcgi.conf

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

PHP only, required if PHP was built with --enable-force-cgi-redirect

fastcgi_param REDIRECT_STATUS 200;[/code]

nginx ne génère aucun log, ni en access ni en error.

Il n’y a rien devant nginx sur le port 80 ; en 443 c’est du port-share openvpn.

J’avais aussi essayé en http simple au lieu de http2, sans succès.

À noter qu’en attendant de trouver une solution, j’ai installé nginx sur un raspberry et le site tourne…

J’insiste sur le fait qu’aucun vhost ne doit répondre en http2 sur le port 80.

grep http2 -r /etc/nginx

Le fait d’avoir un seul vhost en http2 sur le port 80 provoque cet effet (avec nginx en cours cas). Je m’avance sur cette possibilité, mais je le sens bien que ça va être ça :wink:

Voici la raison : Certains navigateurs ont décider de ne pas supporter le http2 si il n’est pas chiffré. (legende [2] sur l’image)

Source: caniuse.com

Je vais essayer de changer ça cet aprem alors. Tous mes vhosts sont en http2 sur le port 80 (mais simplement pour rediriger vers le 443).

Merci !

Magnifique Fanch, encore une fois ! Problème réglé en virant le http2 sur le port 80 de mes autres vhost.