Nginx status page can give realtime data about Nginx’s health. It can help you tweak few Nginx config. Status data can be used in load-balancer env also.
Requirement
Nginx must be compiled with HttpStubStatusModule module. You can check that by running following command:
nginx -V 2>&1 | grep -o with-http_stub_status_module
If you see following output, you are good to go ahead. Otherwise, refer this post to install nginx-full.
with-http_stub_status_module
Nginx Config
You need to add following to a nginx site, say example.com
, inside server {..}
block.
location /nginx_status { stub_status on; access_log off; allow 1.1.1.1; deny all; }
Make sure you replace 1.1.1.1 with your machine’s IP-address. It’s good idea to keep this page accessible to only you.
Output:
Once you codes and reload nginx config, just visit: http://example.com/nginx_status You will see output like below:
Active connections: 43 server accepts handled requests 7368 7368 10993 Reading: 0 Writing: 5 Waiting: 38
Interpretation
- Active connections – Number of all open connections. This doesn’t mean number of users. A single user, for a single pageview can open many concurrent connections to your server.
- Server accepts handled requests – This shows three values.
- First is total accepted connections.
- Second is total handled connections. Usually first 2 values are same.
- Third value is number of and handles requests. This is usually greater than second value.
- Dividing third-value by second-one will give you number of requests per connection handled by Nginx. In above example, 10993/7368, 1.49 requests per connections.
- Reading – nginx reads request header
- Writing – nginx reads request body, processes request, or writes response to a client
- Waiting – keep-alive connections, actually it is
active – (reading + writing).
This value depends on keepalive-timeout. Do not confuse non-zero waiting value for poor performance. It can be ignored. Although, you can force zero waiting by settingkeepalive_timeout 0;
By adding this /nginx_status to a server block would it only show data for that site or for the entire server?
You will get stats for entire Nginx server running that site.
Can this be used with Nginx as a reverse proxy? If so, where to enable?
Yep.
About “where” – if you want to monitor nginx@proxy, copy-paste above config in nginx@proxy.
If you want to monitor nginx@backend, then copy-paste above config in nginx@backend.
You can also monitor both using different location like `/nginx_status_proxy` and `/nginx_status_backend`.
I’m using easy engine.
I try this tutorial to view nginx_status on my site.
But it turns to forbidden. I disable security by comment on ‘allow ip.add.re.ss
But it same.. I got 403 forbidden when i trying access from my site.
What must i do to enable it and turn into 200 response. not 403.
Thanks 🙂
You need to comment out
deny all
line.Compiled and used the added the line to the /sites-enabled/domain.com. Entered the correct ip number too.
But I’m getting a 404 error. All of my site is https. Could this be the problem?
404 should not be related to https.
Does it work without https?