anthony bu gisti düzenledi . Düzenlemeye git
1 file changed, 134 insertions
real-time-php-fpm-status.md(dosya oluşturuldu)
| @@ -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). | |
Daha yeni
Daha eski