Nastavení NGINX + HTTPS + PHP-FPM

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Oli
Člen | 1215
+
0
-

Ahoj,
už se s tím peru 3. den. Zkoušel jsem si nasadit nginx spolu s HTTPS. Vygeneroval jsem si 3 měsíční certifikát na vyzkoušení na crt.siplia.cz. Pak jsem postupoval podle návodu @FilipProcházka https://filip-prochazka.com/…sts-security. Udělal jsem jen 1 odchylku co tak vím: Vygeneroval jsem si privátní klíč přímo u simplie

Problém je v tom, že HTTP verze stránek mě funguje (na jiný doméně, protože jsem si už chytře nastavil HSTS), ale verze HTTPS nefunguje.

Pokud nastavím fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;, tak mě to při každým requestu přesměrovává mezi HTTP a HTTPS s chybou ERR_TOO_MANY_REDIRECTS.

Pokud tenhle řádek zakomentuju, tak to vrací Access denied. V tomhle případě to zaznamená i error.log

[error] 11642#11642: *1128 FastCGI sent in stderr: „Access to the script ‚/path/to/www/‘ has been denied (see security.limit_extensions)“ while reading response header from upstream, client: IP address, server: olisar.eu, request: „GET / HTTP/1.1“, upstream: „fastcgi://unix:/var/run/php5-fpm.sock:“, host: „olisar.eu“

Na netu jsem našel, že tenhle problém se vyřeší odkomentováním řádku security.limit_extensions = .php .php3 .php4 .php5 v www.conf, to ale nepomohlo.

Přijde mě, že jsem všechno nastavení zkoušel už několikrát v různých kombinacích… Neměl někdo podobný problém, nebo neví jak to vyřešit?

PS. Ten blok s PHP nastavením vypadá aktuálně takhle:

location ~ [^/]\.php(/|$) { # main block with PHP processing
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        fastcgi_pass    unix:/var/run/php5-fpm.sock;
        fastcgi_index   index.php;

        fastcgi_param   PATH_INFO $fastcgi_path_info;
        fastcgi_param   PATH_TRANSLATED $document_root$fastcgi_path_info;
#       fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
#       fastcgi_param   HTTPS on;
        try_files $uri =404;
        include         fastcgi_params;
}
jiri.pudil
Nette Blogger | 1032
+
+6
-

Pokud nastavím fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;, tak mě to při každým requestu přesměrovává mezi HTTP a HTTPS s chybou ERR_TOO_MANY_REDIRECTS.

Máš routy nastavené s flagem SECURED?

Oli
Člen | 1215
+
+3
-

No jasně že nemám. Díky moc! Kdyby blbost nadnášela, lítám…
Jsem to 3 dny hledal někde v nastavení serveru a na tohle jsem úplně zapomněl.

Aurielle
Člen | 1281
+
+3
-

Dost pomáhá nějaký nástroj, který ti umožní nahlédnout na hlavičky. Pak snadno zjistíš, jestli redirect generuje webserver nebo Nette :)

PS: jestli plánuješ web na HTTPS nechat, nastav i secure flag u cookies.

Editoval Aurielle (11. 12. 2015 17:54)

Oli
Člen | 1215
+
0
-

@Aurielle díky. Teď jsem si k tomu něco přečetl a budu to muset nastavit přímo v aplikaci, protože ne všechny domény na serveru mám HTTP a tam by cookie nefungovali s nastavením session.cookie_secure = 1 v php.ini (jestli jsem to dobře pochopil)?

Ještě nějaký tipy na zlepšení, který nejsou tak úplně samozřejmý? :-)

Aurielle
Člen | 1281
+
0
-

@Oli: Nejlepší je nastavit v Nette, zrovna se to tu před pár dny probíralo.

Další tipy na zlepšení asi nemám, Filip to má na blogu popsané dost dobře. Snad jedině v php.ini nastavit následující, nechávat to ve výchozím nastavení zapnuté může být bezpečnostní riziko (bližší vysvětlení tady), pokud na server necháváš nahrávat uživateli nějaké soubory. Ale už z chyby v prvním příspěvku vidím, že máš (defaultně) nastavený ten limit na přípony skriptů, takže nejspíš není třeba.

cgi.fix_pathinfo=0

Jestli máte někdo o tématu načteno více a pletu se, klidně mě opravte :)