Berikut merupakan cara untuk menginstall webserver Nginx dengan PHP-FPM dan Userdir. Sebelum memulai pastikan Anda sudah memilki 1 server CentOS dengan RAM minimal 1GB.
Install Nginx
Tambah repo nginx, buat file bernama /etc/yum.repos.d/nginx.repo lalu edit seperti berikut.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
Install nginx.
1
yum -y install nginx
Buat user web1.
1
useradd -m web1
Edit konfigurasi /etc/nginx/conf.d/default.conf untuk enable userdir.
1
2
3
4
5
6
# add into [server] section
server {
location ~ ^/~(.+?)(/.*)?$ {
alias /home/$1/public_html$2;
index index.html index.htm;
}
Install PHP
Install repo PHP
1
yum -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
Lalu install PHP
1
yum -y install php74.x86_64 php74-php.x86_64 php74-php-bcmath.x86_64 php74-php-brotli.x86_64 php74-php-fpm.x86_64 php74-php-gd.x86_64 php74-php-imap.x86_64 php74-php-intl.x86_64 php74-php-ioncube-loader.x86_64 php74-php-json.x86_64 php74-php-mbstring.x86_64 php74-php-mysqlnd.x86_64 php74-php-opcache.x86_64 php74-php-pecl-imagick.x86_64 php74-php-pecl-zip.x86_64 php74-php-sodium.x86_64 php74-php-xml.x86_64 php74-php-xmlrpc.x86_64
Buat pool fpm untuk user web1
1
nano /etc/opt/remi/php74/php-fpm.d/web1.conf
Edit web1.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[web1]
user = web1
group = web1
catch_workers_output = yes
chdir = /home/web1/public_html/
listen = /var/opt/remi/php74/run/php-fpm/web1.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
pm = ondemand
pm.max_children = 5
pm.max_requests = 20
pm.process_idle_timeout = 10
pm.status_path = /status
ping.path = /ping
security.limit_extensions = .phtml .php .php3 .php4 .php5 .php6 .php7 .php8
; php.ini custom configuration directives
php_admin_flag[allow_url_fopen] = on
php_admin_flag[log_errors] = on
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_value[short_open_tag] = on
php_value[doc_root] = ""
php_value[error_log] = /home/web1/logs/web1.php.error.log
php_value[error_reporting] = E_ALL & ~E_NOTICE
php_value[max_execution_time] = 300
php_value[max_input_time] = 300
php_value[memory_limit] = 512M
;php_value[open_basedir] = "/home/web1/:/tmp/"
php_value[post_max_size] = 256M
php_value[upload_max_filesize] = 128M
Buat virtualhost
Login sebagai user web1
1
su - web1
Selanjutnya buat direktori public_html lalu atur permission home user
1
2
mkdir public_html
chmod 711 /home/web1/
Buat file index.php untuk test PHP
1
nano ~/public_html/index.php
Edit index.php
1
<?php phpinfo(); ?>
Buat virtualhost web1
1
nano /etc/nginx/conf.d/web1.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
server {
listen 80;
server_name web1.example.com;
client_max_body_size 128m;
access_log /var/log/nginx/web1.access.log main;
error_log /var/log/nginx/web1.access.log;
root /home/web3/public_html;
index "index.html" "index.cgi" "index.pl" "index.php" "index.xhtml" "index.htm" "index.shtml";
location ~ \.php(/.*)?$ {
fastcgi_read_timeout 300;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
try_files $uri $fastcgi_script_name =404;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass "unix:/var/opt/remi/php74/run/php-fpm/web1.sock";
include /etc/nginx/fastcgi.conf;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Buat file fastcgi.conf jika belum ada.
1
nano /etc/nginx/fastcgi.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
# https://httpoxy.org/
fastcgi_param HTTP_PROXY "";
Restart service
Terakhir restart service apache dan php-fpm
1
systemctl restart php74-php-fpm nginx
Test akses web melalui http://web1.example.com
Optimasi
Berikut merupakan tambahan konfigurasi untuk optimasi webserver dan php-fpm.
Langkah ini opsional dan dapat Anda lewati.
nginx.conf
1
server_tokens off;
php-fpm.conf
1
process_control_timeout = 10