PHP with the NGINX unit application server
+
Par Remi le lundi 14 janvier 2019, 15:21 - HowTo - Lien permanent
Official web site: NGINX Unit
The official repository, for RHEL and CentOS, provides the PHP module PHP version (5.3 / 5.4) in official repository.
My repository provides various versions of the module, as base packages (unit-php) and as Software Collections (php##-unit-php).
Here is small test tutorial, to create 1 application per available PHP version.
1. Official repository installation
For now, the packages are only available for CentOS / RHEL 6 and 7.
Create the repository configuration, read CentOS Packages in official documentation.
[unit] name=unit repo baseurl=https://packages.nginx.org/unit/centos/$releasever/$basearch/ gpgcheck=0 enabled=1
Edite: the main unit package is now also available in my repository, so the official upstream repository is no more mandatory. It includes changes from PR #212 et #215 under review.
2. Remi repository installation
# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
3. Server and modules installation
Install theNGINX unit server and various PHP modules. The unit-php package provides the module for the system default php.
# yum install unit unit-php php56-unit-php php71-unit-php php72-unit-php php73-unit-php
4. Test configuration
4.1 Preparation
This configuration create a listener for each PHP version,listening on a different port(8300, 8356, ...) and an application serving the usual web application directory.
Download the unit.config file:
{
"applications": {
"exphp": {
"type": "php",
"user": "nobody",
"processes": 2,
"root": "/var/www/html",
"index": "index.php"
},
"exphp56": {
"type": "php 5.6",
"user": "nobody",
"processes": 2,
"root": "/var/www/html",
"index": "index.php"
},
"exphp71": {
"type": "php 7.1",
"user": "nobody",
"processes": 2,
"root": "/var/www/html",
"index": "index.php"
},
"exphp72": {
"type": "php 7.2",
"user": "nobody",
"processes": 2,
"root": "/var/www/html",
"index": "index.php"
},
"exphp73": {
"type": "php 7.3",
"user": "nobody",
"processes": 2,
"root": "/var/www/html",
"index": "index.php"
}
},
"listeners": {
"*:8300": {
"application": "exphp"
},
"*:8356": {
"application": "exphp56"
},
"*:8371": {
"application": "exphp71"
},
"*:8372": {
"application": "exphp72"
},
"*:8373": {
"application": "exphp73"
}
}
}
4.2 Run the service:
# systemctl start unit
4.3 Configuration
Configuration is managed through a REST API:
# curl -X PUT --data-binary @unit.config --unix-socket /var/run/unit/control.sock http://localhost/config
{
"success": "Reconfiguration done."
}
And to check running configuration:
# curl --unix-socket /var/run/unit/control.sock http://localhost/config
5 Usage
You can access the application on each new port:
- http://localhost:8300/ for default PHP
- http://localhost:8356/ for PHP version 5.6
- http://localhost:8372/ for PHP version 7.2
- etc
The phpinfo page will display language informations, to be noticed, in this case, Serveur API is unit.
6. Conclusion
As this is a application server, we'll probably plug it behing a web frontal (Apache HHTP server or NGINX).
This project seems interesting, but is quite young (the first version 1.2 available on github was released on june 2018); will see what the user feedback will be.
Current version is 1.7.
Edited: I think that this tool is particularly interesting to manage various languages and various version, so ideal with Software Collections.







Commentaires
Edited entry: RPM are now also available on Fedora
Read: NGINX Unit 1.8.0 Is Now Available, Introduces Internal Routing