Nginx – reverzní proxy a problém s https
- cubic
- Člen | 45
Ahoj,
tohle téma se tu už kdysi dávno řešilo, ale nenašel jsem nic, co by mi
pomohlo..
Web běží na serveru, kde je Nginx jako reverzní proxy před Apachem.
Aktuálně jsme nasadili SSL certifikát, bohužel Nette stále detekuje jako
protokol http
V configu jsem nastavil
http
proxy:
- 127.0.0.1
To má za následek akorát generování absolutních odkazů jako https://domena.tld:80, takže nepoužitelné.
Tady je výpis proměnné $_SERVER:
Array
(
[REDIRECT_STATUS] => 200
[HTTP_HOST] => www.domain.com
[HTTP_X_REAL_IP] => <moje IP>
[HTTP_X_FORWARDED_FOR] => <moje IP>
[HTTP_X_FORWARDED_PROTO] => https
[HTTP_CONNECTION] => close
[CONTENT_LENGTH] => 0
[HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0
[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
[HTTP_ACCEPT_LANGUAGE] => cs,en-US;q=0.7,en;q=0.3
[HTTP_ACCEPT_ENCODING] => gzip, deflate, br
[HTTP_CACHE_CONTROL] => max-age=0
[HTTP_COOKIE] => ..........
[PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[SERVER_SIGNATURE] =>
[SERVER_SOFTWARE] => Apache
[SERVER_NAME] => www.domain.com
[SERVER_ADDR] => 127.0.0.1
[SERVER_PORT] => 80
[REMOTE_ADDR] => 127.0.0.1
[DOCUMENT_ROOT] => ......
[REQUEST_SCHEME] => http
[CONTEXT_PREFIX] =>
[CONTEXT_DOCUMENT_ROOT] => ....
[SERVER_ADMIN] => ....
[SCRIPT_FILENAME] => ....
[REMOTE_PORT] => 59160
[REDIRECT_QUERY_STRING] => web=1
[REDIRECT_URL] => /test/
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.0
[REQUEST_METHOD] => GET
[QUERY_STRING] => web=1
[REQUEST_URI] => /test/
[SCRIPT_NAME] => /index.php
[PHP_SELF] => /index.php
[REQUEST_TIME_FLOAT] => 1470254555.569
[REQUEST_TIME] => 1470254555
)
- Lze to nějak řešit, aniž bych musel definovat protokol napevno? (Na devu a na localu jede web na http, na produkci https, rád bych měl vždy jen jednu routu)
- Není jen chybně nastavený server (nginx)? Případně co přesně mám chtít po adminovi?
Předem díky za rady.
EDIT: použil jsem zatím https://gist.github.com/…fcca406a16cd, ale rád bych to vyřešil elegantěji, pokud to jde :-)
Editoval cubic (3. 8. 2016 22:44)
- pata.kusik111
- Člen | 78
V Nette/Http je implementovaná podpora pro reverzní proxy, pokud správně implementují X_FORWARDED_* nebo FORWARDED hlavičky. Viz https://github.com/…tFactory.php#L200 Stačí v configu nastavit IP té proxy, aby jí Nette rozeznalo.
- Felix
- Nette Core | 1196
V posledni verzi RequestFactory bylo opraveno detekovani portu podle schematu.
- newPOPE
- Člen | 648
No neviem ako dana detekcia funguje ale ani hlavicky:
["REDIRECT_STATUS"]=> string(3) "200"
["ENVIRONMENT"]=> string(10) "production"
["HTTP_X_REAL_IP"]=> string(13) "xx.xx.xx.xx"
["HTTP_HOST"]=> string(15) "www.foo.bar"
["HTTP_X_FORWARDED_FOR"]=> string(13) "xx.xx.xx.xx"
["HTTP_X_FORWARDED_PROTO"]=> string(5) "https"
["HTTP_HTTPS"]=> string(2) "on"
nejak nepomahaju.
V doc je akurat toto „Abychom mohli používat HTTPS protokol, je nutné si správně nakonfigurovat server.“ co je trochu matuce. Rad tam pridam co tam byt ma resp. nejaky example len potrebujem vediet co znamena „spravne nastavenie“.
Editoval newPOPE (25. 7. 2017 14:16)