Troubleshooting
Troubleshooting Common Browser Error
Below is the troubleshooting for common error shown in Browser. For reference, checkout our status page if these instructions told you so.
403 Forbidden
This is tipically not handled by your application and result from configuration error. So, if you see 403 Forbidden
generated by NGINX then this could be either:
- There's no folder in that URL
- The permission for that folder is incorrect
- NGINX need to read your folder, they're accessing using
nginx
user which is added to your group linux user. - So, the
read
byte for group have to enabled. In chmod a0700
will not work, but0740
will make it work. - Try do
chmod g+r -R ~/public_html
from SSH if you clueless about this.
- NGINX need to read your folder, they're accessing using
- You're visiting home website or any subfolder (pages ends with
/
) and there's no handler for it, either it's PHP or Phusion.- If your website is handled by PHP, make sure:
- You have
index.php
orindex.html
in root folder. - Make sure the filename casing is correct, e.g.
index.HTML
won't work here.
- You have
- If your website is handled by Passenger Phusion, make sure:
- you set the root folder correctly (commonly in
public_html/public
) - you've set
passenger:
in NGINX setting, and it's for parent of rootpublic_html
- you've set
enabled: on
inpassenger:
NGINX config - if you're not using GLS (setting with
app_start_command
) make sure have fileapp.js
,passenger_wsgi.py
orconfig.ru
as the startup file in parent of root folder.
- you set the root folder correctly (commonly in
- If your website is handled by PHP, make sure:
404 Not Found
This is tipically handled by your application so nothing should be considered. But if you see 404 Not Found
generated by NGINX then this could be either:
- There's no file in that path.
- There's no
.php
or.html
file to handle that path. - Your file has different filenaming case. e.g.
mypict.PNG
is different withmypict.png
. - Your root or location of NGINX setup is incorrect or messed up.
500 Error
This is tipically returned by your application so you should see log files to solve this problem.
Anyway, if you see a blank page with 500 Internal Server Error
then you might be quickly confused so here's some tips for you:
- If your application is PHP:
- Enable PHP debug. This is mostly preconfigured by your framework (e.g. Laravel's
APP_DEBUG
) so you need to simply adjust the.env
to enable it- If you're not using any framework then change
.user.ini
and wait for 5 minutes before reloading the browser.
- If you're not using any framework then change
- Enable PHP debug. This is mostly preconfigured by your framework (e.g. Laravel's
- If your application is handled by Phusion Passenger:
- Your application really returns 500 Error with no body data. Try change it's environment to debug.
- Try to add
app_env: development
topassenger:
's NGINX Config.
- Try to add
- Your application really returns 500 Error with no body data. Try change it's environment to debug.
502 Bad Gateway
A Bad Gateway error returned from NGINX is potentially a confusing error one. This error means whatever NGINX tries to a proxy connection (either from PHP-FPM or Phusion Passenger), the connection can't be made.
- Check our status page, if it down it could be our handler dies and you should alert us.
- If your application is PHP, you might have a broken setup. Try to fix it by changing PHP version back and forth.
- If your application is handled by Phusion Passenger, the passenger daemon is currently died, maybe because running out of memory. Try to force reload NGINX by changing some config or contact us.
- You have a long-running PHP script that doesn't return anything within the limit.
- Passenger phusion app timeout should never having
502 Bad Gateway
, insteadIncomplete response received from application
will returned.
- Passenger phusion app timeout should never having
429 Too Many Requests
These might be cause:
- You've been blocked by NGINX rate limit
- You've blasted our server with over 500 requests in one moment. Calm down for a moment.
- You've a page with over 500 media and images. You might have HTTP v2 disabled, enable it back.
Refuse to connect
If you not able to connect to your website with error message like ERR_CONNECTION_REFUSED
generated from your browser then these might be cause:
- You've been blocked by Fail2Ban's rate limit
- If you recently have failed login to your WordPress or PhpMyAdmin for 10 times. You're definitely blocked from accesing through our NGINX server because of this, so wait for 24 hours or use another internet connection.
- If you recently have failed login to your SSH or VSCode server for 10 times. You're definitely blocked for using our SSH server because of this, so wait for 24 hours or use WebSSH or use another internet connection.
- Your work connection or ISP might block from connecting to our server
- This might also true with our tools like Webmin UI or SSH or Remote Database since they're using custom port.
- Check our status page, our NGINX service in the server could be died
Incomplete response received from application
This is an error response generated from Phusion Passenger handler, it tells you that your app doesn't return any response (not even HTTP response header) when trying to communicate to your app. These might be the cause:
- Your app is listening to wrong port. If you use GLS (setting with
app_start_command
) your app must listen to a port specified by$PORT
from that config.- Try starting your app with exact config from GLS in SSH to see if your app is actually can listen from given port (specifyng port > 33000 will allow direct connection without from NGINX).
- Your app is having problems or detecting that the request is problematic and decided to ignore the request instead.
- You might have an expensive computation and it's exceeding 10 minutes and it's not properly handled
- Your app is crashing or panic and as the result it's not able to respond to the request
- Your app is running a bun.js runtime and doesn't apply our
proxfix
solution
HTTPS Error ERR_CERT_AUTHORITY_INVALID
This means that your SSL certificate has not been set or has expired. Try open Check Connection Tab
then push the Install HTTPS Certificate
button when prompted.
If you encounter ERR_CERTIFICATE_TRANSPARENCY_REQUIRED
after an SSL update, you don't need to panic because of an error due to cache and it will disappear in a few minutes.
Unable to resolve IP Address / DNS error
This is an error generated from your browser with messages like DNS_PROBE_FINISHED_NXDOMAIN
.
We have a separate section for fixing DNS issues try to read that page.
CSS or JS or media files are not updated
We currently have a expired
cache policy set to max for all CSS/JS/Media files. It is bad idea for your users to need full-cache reload so always use cache-bursting method such as appending with random query parameter. This should already be handled with most frontend bundler.
Troubleshooting Common Server Error
It's common to find that your app works on your machine, but not on ours. Most errors can be solved with educated guess if you can open your log files (always know how to access logs!).
With that in mind, we'll take some common error related with working with our servers.
Connection Refused when connecting to third party API
These things could be the reason:
- This is commonly caused by our firewall enabled for your website. You can disable it if you're a subscibing account.
- Your target API is currently down or currently refusing to respond
- We blocked from accessing this target API. Check our server IP address on SpamHaus or AbuseIPDB, that might be related.
Unable to Connect to Database
These things could be the reason:
- You haven't enabled
mysql
orpostgres
feature via Runner. - You have wrong
hostname
/username
/password
/dbname
set. Always sethostname
tolocalhost
. Seeusername
andpassword
from manage tab.- Try to login with
PhpMyAdmin
orPhpPgAdmin
to check if your website actually able to correct and see the correct database list.
- Try to login with
Infinite HTTP Redirection
These things could be the reason:
- You have enabled DNS proxy to our server and there's misconfiguration there.
- For example, we often get Infinite redirect with Cloudflare DNS proxy since when it's activated, we'll think you're connecting to our server insecure HTTP and we've set
ssl: always
to always move you to HTTPS. But, Cloudflare DNS proxy always connect to our server with HTTP even though your website is connecting with HTTPS to Cloudflare DNS proxy.
- For example, we often get Infinite redirect with Cloudflare DNS proxy since when it's activated, we'll think you're connecting to our server insecure HTTP and we've set
- Your app might really has a messed up problem either it's because some bug with Session handling or some other rare cases like caches.
Not Getting Real IP Address
Your requests is handled by NGINX so the requests are proxied.
For PHP, accessing visitor IP client is via $_SERVER['REMOTE_ADDR']
while for Passenger Phusion apps it's accessible via HTTP header X-Forwarded-For
or !~Passenger-Client-Address
if supported.
Other questions?
Don't hesitate to ask us for guidance! (the contact link is on the bottom on portal page)