Apache 2.4 + PHP-FPM + ProxyPassMatch

31

Saya baru-baru ini menginstal Apache 2.4 pada mesin lokal saya, bersama dengan PHP 5.4.8 menggunakan PHP-FPM.

Semuanya berjalan cukup lancar (setelah beberapa saat ...) tetapi masih ada kesalahan aneh:

Saya mengkonfigurasi Apache untuk PHP-FPM seperti ini:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/Users/apfelbox/WebServer"
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/Users/apfelbox/WebServer/$1
</VirtualHost>

Ini berfungsi, misalnya jika saya memanggil http://localhost/info.phpsaya mendapatkan yang benar phpinfo()(itu hanya file uji).

Jika saya memanggil direktori, saya mendapatkan 404 dengan isi File not found.dan di log kesalahan:

[Tue Nov 20 21:27:25.191625 2012] [proxy_fcgi:error] [pid 28997] [client ::1:57204] AH01071: Got error 'Primary script unknown\n'

Memperbarui

Saya sekarang mencoba melakukan proxy dengan mod_rewrite:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/Users/apfelbox/WebServer"

    RewriteEngine on    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/Users/apfelbox/WebServer/$1 [L,P]
</VirtualHost>

Tetapi masalahnya adalah: itu selalu mengarahkan, karena http://localhost/secara otomatis http://localhost/index.phpdiminta, karena

DirectoryIndex index.php index.html

Perbarui 2

Ok, jadi saya pikir "mungkin memeriksa apakah ada file untuk diberikan kepada proxy terlebih dahulu:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/Users/apfelbox/WebServer"

    RewriteEngine on    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/Users/apfelbox/WebServer/$1 [L,P]
</VirtualHost>

Sekarang penulisan ulang lengkap tidak berfungsi lagi ...

Perbarui 3

Sekarang saya punya solusi ini:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/Users/apfelbox/WebServer"

    RewriteEngine on    
    RewriteCond /Users/apfelbox/WebServer/%{REQUEST_FILENAME} -f
    RewriteRule ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/Users/apfelbox/WebServer/$1 [L,P]
</VirtualHost>

Pertama periksa, bahwa ada file untuk diteruskan ke PHP-FPM (dengan path lengkap dan absolut ) dan kemudian lakukan penulisan ulang.

Ini tidak berfungsi saat menggunakan penulisan ulang URL di dalam subdirektori, juga gagal untuk URL seperti http://localhost/index.php/test/ So back to square.


Ada ide?

apfelbox
sumber

Jawaban:

34

Setelah berjam-jam mencari dan membaca dokumentasi Apache, saya telah menemukan solusi yang memungkinkan untuk menggunakan kumpulan ini, dan juga memungkinkan direktif Menulis ulang di .htaccess untuk bekerja bahkan ketika url berisi file .php.

<VirtualHost ...>

 ...

 # This is to forward all PHP to php-fpm.
 <FilesMatch \.php$>
   SetHandler "proxy:unix:/path/to/socket.sock|fcgi://unique-domain-name-string/"
 </FilesMatch>

 # Set some proxy properties (the string "unique-domain-name-string" should match
 # the one set in the FilesMatch directive.
 <Proxy fcgi://unique-domain-name-string>
   ProxySet connectiontimeout=5 timeout=240
 </Proxy>

 # If the php file doesn't exist, disable the proxy handler.
 # This will allow .htaccess rewrite rules to work and 
 # the client will see the default 404 page of Apache
 RewriteCond %{REQUEST_FILENAME} \.php$
 RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f
 RewriteRule (.*) - [H=text/html]

</VirtualHost>

Sesuai dokumentasi Apache, parameter proxy SetHandler memerlukan Apache HTTP Server 2.4.10.

Saya harap solusi ini akan membantu Anda juga.

FrancescoA
sumber
2
Ini jelas merupakan jawaban untuk tahun 2015, semua yang lain di sini adalah omong kosong untuk pengaturan modern (Katakanlah debian stable)
Dmitri DB
1
Saya telah membenturkan kepala saya ke dinding pada masalah yang sama ini untuk beberapa waktu, dan saya memiliki pengaturan yang sangat mirip dengan milik Anda. Bisakah Anda memposting arahan .htaccess Menulis ulang Anda? Dari apa yang saya mengerti, segala sesuatu dalam jawaban ini hanya apa yang Anda miliki di file httpd.d / site.conf Anda.
David W
1
Saat ini menggunakan RewriteRule ini tampaknya cukup berbahaya karena dapat mengekspos config.php file di dataran jika mereka berada di dalam direktori Aliased dan karenanya tidak ada di% {DOCUMENT_ROOT} /% {REQUEST_URI}.
Zulakis
1
Luar biasa 9 baris kode. Ini adalah cawan suci dan satu-satunya yang bekerja 100% untuk saya. Hanya sidenote: Jika Anda beralih dari solusi menggunakan LocationMatch, Anda tidak perlu menambahkan path file absolut ke url fcgi. Nyalakan proksi dan tulis ulang login di apache untuk diperhatikan.
Phil
1
Memberi +1 karena pos ini tidak seperti sumber lainnya yang saya lihat membantu saya memahami apa yang seharusnya diwakili "unik-domain-nama-string".
threeve
10

Saya mengalami masalah ini kemarin - Apache 2.4 pindah dari Debian / eksperimental ke Debian / tidak stabil memaksa saya untuk berurusan dengan hal-hal baru ini; bukan pada server produksi kami tentu saja;).

Setelah membaca apa yang terasa seperti jutaan situs, dokumentasi Apache, laporan bug dan hasil debug pada log kesalahan, akhirnya saya berhasil. Tidak, belum ada dukungan untuk FPM dengan soket . Konfigurasi Debian default telah menggunakan soket untuk beberapa waktu sekarang, sehingga pengguna Debian harus mengubahnya juga.

Inilah yang berfungsi untuk situs CakePHP dan PHPMyAdmin (yang terakhir membutuhkan konfigurasi jika Anda menggunakan paket Debian), jadi saya dapat mengonfirmasi bahwa mod_rewritemasih berfungsi seperti yang diharapkan untuk melakukan penulisan ulang URL mewah.

Perhatikan DirectoryIndex index.php, yang mungkin menjadi alasan tidak ada konfigurasi Anda yang berfungsi untuk "folder" (setidaknya itulah yang tidak berfungsi di sini).

Saya masih mendapatkan File not found.untuk direktori, tetapi hanya jika tidak ada file indeks itu dapat diuraikan. Akan senang untuk menyingkirkan itu juga, tapi itu tidak sepenting sekarang.


<VirtualHost *:80>
    ServerName site.localhost

    DocumentRoot /your/site/webroot
    <Directory />
            Options FollowSymlinks
            DirectoryIndex index.php
            AllowOverride All
            Require all granted
    </Directory>

    <LocationMatch "^(.*\.php)$">
            ProxyPass fcgi://127.0.0.1:9000/your/site/webroot
    </LocationMatch>

    LogLevel debug
    ErrorLog /your/site/logs/error.log
    CustomLog /your/site/logs/access.log combined
</VirtualHost>

Vhost di atas berfungsi dengan baik dengan .htaccess di root seperti ini:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

Saya tidak mengerti maksud Anda URL rewriting inside a subdirectory(saya hanya menulis ulang ke index.php root).


(Oh, dan Anda harus memastikan Xdebug tidak bertentangan dengan FPM di sistem Anda, di luar kotak mereka ingin menggunakan port yang sama.)

Alex
sumber
Ini adalah solusi yang baik tetapi sayangnya pendekatan ini tidak berfungsi ketika url yang mengandung .php perlu ditulis ulang misalnya untuk WordPress multisite. /ms_blog_1/wp-admin/load-scripts.php?blah=blah
Phil
Bagi saya, hanya menambahkan override DirectoryIndex index.htmldi vhost yang dimaksud memperbaikinya. Jika saya punya DirectoryIndex index.php, maka sepertinya file PHP lainnya akhirnya memberikan kesalahan 'File tidak ditemukan' dan 'Skrip primer tidak diketahui'. Dalam kasus saya, saya punya index.htmltapi file php test.php.
geerlingguy
4

Yang perlu Anda lakukan adalah mengatur:

 ProxyErrorOverride on

Dan jangan lupa untuk mengatur halaman pelanggan dengan:

ErrorDocument 404 /path/to/error_page_file    
Shiqi Zhong
sumber
2

Ini yang saya punya. Tampaknya bekerja dengan baik. Saya menempatkan Drupal di subdirektori dan penulisan ulang berfungsi, indeks direktori berfungsi, dan PATH_INFO berfungsi.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} ^/((.*\.php)(/.*)?)$
RewriteCond %2 -f
RewriteRule . fcgi://127.0.0.1:9000/%1 [L,P]
RewriteOptions Inherit

Saya sudah mencoba melakukan hal seperti ini tanpa penulisan ulang ("Jika" dan semacamnya), tetapi saya tidak dapat mengerjakan apa pun.

EDIT: Perhatikan bahwa jika Anda menerapkan ini sebagai penyedia hosting bersama, ini bisa menjadi masalah keamanan. Itu akan memungkinkan pengguna untuk melewatkan skrip PHP ke proxy fcgi sewenang-wenang. Jika Anda memiliki kumpulan terpisah untuk setiap pengguna, itu akan memungkinkan peningkatan serangan privilege.

RockinRoel
sumber
2

Namun solusi lain (membutuhkan Apache> = 2.4.10) - Di dalam vhost:

# define worker
<Proxy "unix:/var/run/php5-fpm-wp.bbox.nuxwin.com.sock|fcgi://domain.tld" retry=0>
    ProxySet connectiontimeout=5 timeout=7200
</Proxy>

<If "%{REQUEST_FILENAME} =~ /\.php$/ && -f %{REQUEST_FILENAME}">
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    SetHandler proxy:fcgi://domain.tld
</If>

Jadi di sini, fcgi handler untuk PHP akan ditetapkan hanya jika file itu ada dan jika namanya cocok dengan ekstensi file PHP.

BTW: Bagi mereka yang memiliki ide untuk mengatur ProxyErrorOverride ke Aktif , ketahuilah bahwa ini benar-benar ide yang buruk. Penggunaan arahan ini bukan tanpa menyebabkan masalah. Misalnya, aplikasi PHP yang mengirim kode HTTP seperti 503 akan menghasilkan hasil yang tidak terduga. Penangan kesalahan default akan terlibat dalam kasus apa pun dan untuk aplikasi PHP yang menyediakan API, itu benar-benar perilaku yang buruk.

Nuxwin
sumber
Sayangnya masih ada kesalahan "AH01071: Got error 'Script primer tidak dikenal \ n'" menggunakan solusi ini.
klor
1

Cara terbaik untuk mengatasi ini adalah dengan mengaktifkan log debugging untuk mod_proxy dan mod_rewrite dan php-fpm. Di apache 2.4 Anda sekarang dapat mengaktifkan debugging log hanya untuk modul tertentu. http://httpd.apache.org/docs/current/mod/core.html#loglevel Per-modul dan konfigurasi per-direktori tersedia di Apache HTTP Server 2.3.6 dan yang lebih baru

Mungkin Anda mendapat tebasan ganda pada direktori?

Inilah yang saya gunakan dan berfungsi dengan baik:

<LocationMatch ^(.*\.php)$>
  ProxyPass fcgi://127.0.0.1:9000/home/DOMAINUSER/public_html$1
</LocationMatch>
tukang makan
sumber
1

Satu hal yang saya temui dalam berurusan dengan masalah ini, adalah jika Anda menggunakan kombinasi:

chroot = /path/to/site
chdir = /

Dalam konfigurasi kumpulan fpm Anda, jangan teruskan path lengkap ke ProxyPassarahan.

ProxyPass fcgi://127.0.0.1:9020/$1

Tapi -HANYA- jika pool di port itu di-chroot.

es tipis
sumber
1

Saya tidak yakin apakah masalahnya terkait, tetapi saya telah menemukan solusi yang berfungsi sebagian di sini:

https://stackoverflow.com/questions/44054617/mod-rewrite-in-2-4-25-triggering-fcgi-primary-script-unknown-error-in-php-fpm

Triknya sepertinya menambahkan? char di .htaccess RewriteRule, mis. menggunakan:

RewriteRule ^(.*)$ index.php?/$1 [L,NS]

dari pada:

RewriteRule ^(.*)$ index.php/$1 [L,NS]

Sumber masalahnya tampaknya adalah perubahan mod_rewrite dari Apache 2.4.25. Saya telah menggunakan tingkat log trace1 Apache untuk mengamati "loop" yang lulus $ 1 ke php-fpm setelah index.php / $ 1 telah berlalu. $ 1 menghasilkan kesalahan "AH01071: Got error 'Script primer tidak dikenal \ n'".

Semoga berita gembira kecil ini membantu seseorang untuk menyelesaikan masalah mereka.

Biapy
sumber
0

saya memiliki kesalahan juga setelah beralih ke php-fpm + apache 2.4.6 untuk contoh drupal

tapi saya menggunakan mod acara mpm

cukup masukkan

DirectoryIndex index.php bekerja untukku

maka pengaturan Vhost saya terlihat seperti di bawah ini

<VirtualHost *:8080>
  ServerAdmin webmaster@localhost
  ServerName sever.com
  DocumentRoot /var/www/html/webroot
    ErrorLog logs/web-error_log
    CustomLog logs/web-access_log common
<IfModule mpm_event_module>
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/webroot/$1
</IfModule>
  <Directory /var/www/html/webroot>
     Options FollowSymlinks
     DirectoryIndex index.php
     AllowOverride All
     Require all granted
  </Directory>
</VirtualHost>

Terima kasih

tidak perlu merevisi file .htaccess default drupal

sealionking
sumber
[Rab 25 Apr 01: 41: 31.526781 2018] [proxy_fcgi: error] [pid 2012: tid 140181155772160] (70007) Batas waktu yang ditentukan telah kedaluwarsa: [klien 127.0.0.1:60308] AH01075: Permintaan pengiriman kesalahan ke:, referensi: www / admin / laporan
sealionking
0

Saya menghadapi masalah yang sama pada server saya (centos 7.3.16 buruh pelabuhan). Setelah melacak log php-fpm, saya menemukan miss a sys lib. WARNING: [pool www] child 15081 said into stderr: "php-fpm: pool www: symbol lookup error: /lib64/libnsssysinit.so: undefined symbol: PR_GetEnvSecure" kemudian, saya Restall nspr, itu berfungsi. Jika Anda tidak dapat menemukan solusi setelah mencoba metode apa pun, Anda dapat mencoba ini. yum -y install/reinstall nspr

lemon
sumber
0

Ini bekerja dengan Wordpress 5.1.1 dan yang lebih baru bersama dengan PHP 7.3, FastCGI, proksi, juga MariaDB / MySQL. Diperiksa dua kali di server saya. Bekerja seperti pesona.

Pertama di CentOS / Fedora / Red Hat

sudo yum remove php*
sudo yum --enablerepo=extras install epel-release
sudo yum install php-fpm php-mysql php-gd php-imap php-mbstring 
sudo grep -E '(proxy.so|fcgi)' /etc/httpd/conf.modules.d/00-proxy.conf
sudo mv /etc/httpd/conf.d/php.conf /etc/httpd/conf.d/php.conf_bak

Edit file ini:

sudo nano /etc/php-fpm.d/www.conf

Tempel ini:

[www]

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses on a
;                            specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9000
listen = /run/php-fcgi.sock

sudo ll /run/php-fcgi.sock

Harus memberikan srw-rw-rw-.

Atau cara mengatur di Debian / Ubuntu

Tutorial:

sumber: https://emi.is/?page=articles&article=php-7-installation-and-configuration-for-apache-2.4-using-php-fpm-(debian ,-- repository)


sudo apt purge 'php*' or sudo apt-get purge 'php*'
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt install php7.3 php7.3-fpm php-mysql php-mbstring php-gd php-imap libapache2-mod-security2 modsecurity-crs
systemctl status php7.3-fpm
systemctl stop php7.3-fpm.service

sudo a2dismod php7.0 php7.1 php7.2 mpm_event mpm_worker
sudo a2enmod mpm_prefork
sudo a2enmod php7.3
sudo systemctl restart apache2 (httpd in CentOS)

Masalahnya adalah bahwa php 7.3 dari repo Ondrej hanya bekerja dengan mode mpm_prefork. Ia memiliki git repo, jadi Anda dapat menemukannya di internet dan bertanya kepadanya, apakah ia akan membuat php 7.3 untuk mpm_worker dan mpm_event. Konfigurasi lainnya untuk distro keluarga Debian adalah di bawah ini:


sudo apt --assume-yes install php7.3-fpm
sudo systemctl stop php7.3-fpm.service
sudo rm /var/log/php7.0-fpm.log
sudo mkdir /var/log/php7.3-fpm/
sudo touch /var/log/php7.3-fpm/error.log
sudo mkdir /var/log/php7.3/
sudo touch /var/log/php7.3/error.log
sudo mkdir /var/tmp/php7.3/
sudo > /etc/php/7.3/fpm/php.ini
sudo > /etc/php/7.3/fpm/php-fpm.conf
sudo rm /etc/php/7.3/fpm/pool.d/www.conf
sudo touch /etc/php/7.3/fpm/pool.d/example.com.conf
sudo useradd --comment "PHP" --shell "/usr/sbin/nologin" --system --user-group php

sudo nano /etc/php/7.3/fpm/php.ini

pasta


[PHP]
date.timezone = Europe/Prague
display_errors = Off
error_log = /var/log/php7.3/error.log
error_reporting = 32767
log_errors = On
register_argc_argv = Off
session.gc_probability = 0
short_open_tag = Off
upload_tmp_dir = /var/tmp/php7.3/

sudo nano /etc/php/7.3/fpm/php-fpm.conf

pasta


[global]
error_log = /var/log/php7.3-fpm/error.log
include = /etc/php/7.3/fpm/pool.d/*.conf

sudo nano /etc/php/7.3/fpm/pool.d/example.com.conf

pasta


[example.com]
group = php
listen = 127.0.0.1:9000
pm = ondemand
pm.max_children = 5
pm.max_requests = 200
pm.process_idle_timeout = 10s
user = php

sudo nano /etc/logrotate.d/php7.3-fpm

salin ini ke file txt:

/var/log/php7.3-fpm.log {
    rotate 12
    weekly
    missingok
    notifempty
    compress
    delaycompress
    postrotate
            /usr/lib/php/php7.3-fpm-reopenlogs
    endscript
}

hapus dan tempel ini alih-alih di atas:

/var/log/php7.3/*.log /var/log/php7.3-fpm/*.log
{
copytruncate
maxage 365
missingok
monthly
notifempty
rotate 12
}

Tambahkan arahan

sudo nano /etc/apache2/sites-available/example.com.conf


<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/html/example.com/public_html
    DirectoryIndex index.php index.htm index.html index.xht index.xhtml
    LogLevel info warn
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <FilesMatch "^\.ht">
    Require all denied
    </FilesMatch>

    <files readme.html>
    order allow,deny
    deny from all
    </files>

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =example.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/example.com/public_html

    <Directory /var/www/html/example.com/public_html>
        Options Indexes FollowSymLinks Includes IncludesNOEXEC SymLinksIfOwnerMatch
        AllowOverride None
    </Directory>
</VirtualHost>

Kemudian aktifkan situs:

sudo a2ensite /etc/apache2/sites-available/example.com.conf

Edit situs SSL berikutnya (Dalam hal ini certbot dari Let's Encrypt telah diinstal dan dikonfigurasi sebelumnya pada awal konfigurasi sertifikat SSL).

sudo nano /etc/apache2/sites-available/example.com-le-ssl.conf

<IfModule mod_ssl.c>
    #headers for security man in the middle attack find how to enable this mod in Google
    LoadModule headers_module modules/mod_headers.so
    <VirtualHost *:443>
        Header always set Strict-Transport-Security "max-age=15768000"
        SSLEngine On
        ServerName example.com
        ServerAdmin [email protected]
        DocumentRoot /var/www/html/example.com/public_html
        <Directory /var/www/html/example.com/public_html>
        Options Indexes FollowSymLinks Includes IncludesNOEXEC SymLinksIfOwnerMatch
        AllowOverride All
        Require all granted
        DirectoryIndex index.php
        RewriteEngine On
         <FilesMatch ^/(.*\.php(/.*)?)$>
           SetHandler "fcgi://example.com:9000/var/www/html/example.com/public_html"
          </FilesMatch>
        </Directory>
    # Log file locations
    #LogLevel info ssl:warn
    LogLevel debug
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # modern configuration
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    #SSLCipherSuite HIGH:!aNULL:!MD5
    SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM$
    SSLHonorCipherOrder on
    SSLCompression off
    SSLSessionTickets off

    <FilesMatch "^\.ht">
    Require all denied
    </FilesMatch>

    <files readme.html>
       order allow,deny
       deny from all
    </files>

</VirtualHost>
    #Stapling OCSP for Let's Encrypt certs.
    SSLUseStapling          on
    SSLStaplingResponderTimeout     5
    SSLStaplingReturnResponderErrors        off
    SSLStaplingCache        shmcb:/var/run/ocsp(128000)
</IfModule>

sudo a2enmod proxy proxy_fcgi setenvif
sudo systemctl reload apache2.service
sudo chown --recursive root:adm /etc/php/
sudo chmod --recursive 0770 /etc/php/
sudo chown --recursive php:adm /var/log/php7.3/
sudo chown --recursive php:adm /var/log/php7.3-fpm/
sudo chmod --recursive 0770 /var/log/php7.3/
sudo chmod --recursive 0770 /var/log/php7.3-fpm/
sudo chown --recursive php:php /var/tmp/php7.3/
sudo chmod --recursive 0770 /var/tmp/php7.3/
sudo a2enconf php7.3-fpm
sudo systemctl enable php7.3-fpm.service
sudo systemctl start php7.3-fpm.service

Ingatlah untuk menambahkan port 9000 ke firewall di Debian / Ubuntu

sudo ufw allow 9000/tcp
sudo ufw status

Pada CentoOS / Fedora / Red Hat

sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
sudo firewall-cmd --state 
Gall Anonim
sumber