anthony ревизій цього gist . До ревизії
1 file changed, 134 insertions
real-time-php-fpm-status.md(файл створено)
@@ -0,0 +1,134 @@ | |||
1 | + | # Real-time PHP-FPM Status | |
2 | + | This gist will explain you how to enable an undocumented feature of `PHP-FPM` which will give a real-time performance stats. | |
3 | + | ||
4 | + | Everybody knows the famous `phpinfo()` and the page it generates, right? Then the real-time `PHP-FPM` status page design is very similar. | |
5 | + | ||
6 | + |  | |
7 | + | ||
8 | + | > Some informations from the top are not displayed to avoid security issues. | |
9 | + | ||
10 | + | ## Enable PHP-FPM Status | |
11 | + | This is pretty simple to do, just run the command below. | |
12 | + | ||
13 | + | ```bash | |
14 | + | sudo sed -i 's/;pm.status_path/pm.status_path/' /etc/php/7.0/fpm/pool.d/www.conf | |
15 | + | ``` | |
16 | + | ||
17 | + | Then restart the service: | |
18 | + | ||
19 | + | ```bash | |
20 | + | sudo systemctl restart php7.0-fpm | |
21 | + | ``` | |
22 | + | ||
23 | + | > This has been tested on `PHP` versions `7.0`, `7.1`, `7.2` and `7.3`. | |
24 | + | ||
25 | + | ## Edit PHP / Apache Configuration | |
26 | + | In order to make the `status` page reachable, you will need to modify the `PHP` configuration related to `Apache2`. | |
27 | + | ||
28 | + | ```bash | |
29 | + | # Do this for all installed PHP versions... | |
30 | + | sudo nano /etc/apache2/conf-available/php7.0-fpm.conf | |
31 | + | ``` | |
32 | + | ||
33 | + | And add these lines: | |
34 | + | ||
35 | + | ```apache | |
36 | + | # Enable 'status' and 'ping' page | |
37 | + | <LocationMatch "/(ping|status)"> | |
38 | + | SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost" | |
39 | + | </LocationMatch> | |
40 | + | ||
41 | + | # Enable *real-time* 'status' page | |
42 | + | <IfModule alias_module> | |
43 | + | Alias /realtime-status "/usr/share/php/7.0/fpm/status.html" | |
44 | + | </IfModule> | |
45 | + | ``` | |
46 | + | ||
47 | + | > This file `/usr/share/php/7.0/fpm/status.html` is totally **undocumented**, I was not able to find any related information on the web. | |
48 | + | ||
49 | + | Then restart `Apache2` to apply changes: | |
50 | + | ||
51 | + | ```bash | |
52 | + | sudo systemctl restart apache2 | |
53 | + | ``` | |
54 | + | ||
55 | + | > Make sure the `PHP` socket file and **real-time** `HTML` status has the correct version! | |
56 | + | ||
57 | + | ## Fix the broken `PHP` logo (_optional_) | |
58 | + | The `PHP` logo is broken unfortunately but I've found a way to fix it, this is just a little dirty... :sweat_smile: | |
59 | + | ||
60 | + | ```bash | |
61 | + | sudo sed -i 's|https://static.php.net/www.php.net/images/php.gif|data:image/png;base64,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|' /usr/share/php/7.0/fpm/status.html | |
62 | + | ``` | |
63 | + | ||
64 | + | > Again, do this for all installed `PHP` versions. (_no need to restart the web server_) | |
65 | + | ||
66 | + | ## Available `status` formats | |
67 | + | The default and very well documented `status` page offer **three** different formats: | |
68 | + | ||
69 | + | * `XML` | |
70 | + | * `JSON` | |
71 | + | * `HTML` | |
72 | + | ||
73 | + | But all of them are not refresh in **real-time**. | |
74 | + | ||
75 | + | All formats, also give **two** different output levels: | |
76 | + | ||
77 | + | * `normal` | |
78 | + | * `full` | |
79 | + | ||
80 | + | ### 1. XML Format | |
81 | + | Access `URL` is: http://localhost/status?xml | |
82 | + | ||
83 | + |  | |
84 | + | ||
85 | + | For the `full` output level: http://localhost/status?xml&full | |
86 | + | ||
87 | + |  | |
88 | + | ||
89 | + | ### 2. JSON Format | |
90 | + | Access `URL` is: http://localhost/status?json | |
91 | + | ||
92 | + |  | |
93 | + | ||
94 | + | For the `full` output level: http://localhost/status?json&full | |
95 | + | ||
96 | + |  | |
97 | + | ||
98 | + | ### 3. HTML Format | |
99 | + | Access `URL` is: http://localhost/status?html | |
100 | + | ||
101 | + |  | |
102 | + | ||
103 | + | For the `full` output level: http://localhost/status?html&full | |
104 | + | ||
105 | + |  | |
106 | + | ||
107 | + | > The alias `status` is defined here: `/etc/php/7.0/fpm/pool.d/www.conf`. | |
108 | + | ||
109 | + | ## Real-time `status` page | |
110 | + | This is the **undocumented** one. | |
111 | + | ||
112 | + | Access `URL` is: http://localhost/realtime-status | |
113 | + | ||
114 | + |  | |
115 | + | ||
116 | + | _It will use the `JSON` output format internally to display the real-time values._ | |
117 | + | ||
118 | + | > The alias `realtime-status` is defined here: `/etc/apache2/conf-available/php7.0-fpm.conf`. | |
119 | + | ||
120 | + | ## Access via `HTTPS` protocol | |
121 | + | At the moment you have created an `SSL` / `TLS` certificate for your testing or production domain, the `standard` and the `real-time` mode should work with both `HTTP` and `HTTPS` protocols. | |
122 | + | ||
123 | + | # References | |
124 | + | Some references where I was able to find useful informations. | |
125 | + | ||
126 | + | * https://howto.biapy.com/en/debian-gnu-linux/servers/apache-2/setup-a-status-page-on-a-apache-2-server | |
127 | + | * https://www.tecmint.com/enable-monitor-php-fpm-status-in-nginx/ | |
128 | + | * https://stackoverflow.com/questions/37367851/set-up-and-access-the-php-fpm-status-page-in-bitnami-lamp-stack | |
129 | + | ||
130 | + | # Contribute | |
131 | + | Feel free to comment if you have any suggestions or corrections to make. | |
132 | + | ||
133 | + | # Contact | |
134 | + | You can reach me on Twitter using: [@Jiab77](https://twitter.com/Jiab77). |
Новіше
Пізніше