I received a 500-error on my API request to a PHP backend. The result was returned as a 500 html status.
When searching the logs, there was no mention of this 500 error, other than in the access log of nginx.
Where does nginx or php-fpm put the backtrace of PHP errors?
Turns out, you need to enable catch_workers_output = yes
in your www.conf
file, typically located over at /etc/php/7.4/fpm/pool.d/
# file /etc/php/7.4/fpm/pool.d/www.conf
...
catch_workers_output = yes
...
The comments above that line explains it pretty well:
; Redirect worker stdout and stderr into main error log. If not set,
; stdout and stderr will be redirected to /dev/null according to
; FastCGI specs.
; Note: on highloaded environement, this can cause some delay in
; the page process time (several ms).
; Default Value: no
Recently I’m a fan of serving docker containers over serving Virtual Hosts using a webserver.
In order to use regular domainnames without ports, I set up Nginx to receive the request on the domainname and let it forward the request to the relevant Docker container on the specific port it is running on.
Example
Imagine I have a Docker webserver-container hosting my app. It runs on my server exposing port 8080. I use the URL app.pauledenburg.com
.
I don’t want people to use http://app.pauledenburg.com:8080
but just the URL without the port
http://app.pauledenburg.com
.
I use nginx for this:
server { listen 80; server_name app.pauledenburg.com; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }