ในปัจจุบันระบบเว็บเซิฟเวอร์ที่นิยมที่สุดในบ้านเราก็น่าจะเป็น Apache เนื่องด้วยติดตั้งง่ายแทบจะไม่ต้องปรับแต่งอะไรเลยเพิ่มเลยก็สามารถใช้งานได้แล้วและที่สำคัญมี community ที่กว้างมากครับซึ่งข้อเสียของ Apache นั้นที่ผมพบเห็นก็คือเรื่องของกินแรมเป็นจำนวนมากยิ่งถ้าโหลด static file ใหญ่ๆไม่ต้องพูดถึงครับอาจจะทำให้ถึงกับ service ดับเลยก็ไได้จึงได้มีคนติดค้นเรื่องของการทำ Reverse Proxy โดยให้ NGINX (เป็นเว็บเซิฟเวอร์น้องใหม่ไฟแรงในบ้านเราแต่ทางฝรั่งฮิตกันมาหลายปีแล้ว) เป็นด่านหน้าคอยโหลดพวก Static file แทนส่วน Dynamic File พวกไฟล์ php จะส่งไปให้ Fast CGI โหลดแทนทำให้ประหยัด memory ไปได้มากทีเดียวและ Fast CGI ถูกควบคุมด้วย php-fpm ซึ่งจะแนะนำวิธีติดตั้งต่อไปครับ
ขั้นตอนการติดตั้ง
1 > เตรียม packages ให้พร้อม
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
2 > ติดตั้ง MySQL
yum -y install mysql mysql-server
เปิด service mysql
service mysqld restart
ปรับแต่งค่าเริ่มต้นให้ mysql
mysql_secure_installation
By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y … Success! Normally, root should only be allowed to connect from ‘localhost’. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y … Success! By default, MySQL comes with a database named ‘test’ that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y – Dropping test database… … Success! – Removing privileges on test database… … Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y … Success! Cleaning up… All done! If you’ve completed all of the above steps, your MySQL installation should now be secure. Thanks for using MySQL!
restart service
service mysqld restart
3 > ติดตั้ง NGINX + Apache
yum install -y nginx httpd
4 > ติดตั้ง PHP
yum install php-pear-Net-Socket php-pear php-common php-gd php-devel php php-mbstring php-pear-Mail php-cli php-pear-Auth-SASL php-ldap php-pear-Net-SMTP php-imap php-snmp php-pdo php-xml php-mysql php-fpm -y
แก้ไขไฟล์ /etc/php.ini และเปลี่ยนค่า cgi.fix_pathinfo=1 ให้เป็น cgi.fix_pathinfo=0
แก้ไขไฟล์ /etc/nginx/conf.d/default.conf
# # The default server # server { listen 80; server_name example.com; location / { root /usr/share/nginx/html; index index.php index.html index.htm; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass 127.0.0.1:8080; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
แก้ไฟไฟล์ /etc/nginx/conf.d/virtual.conf
server { listen 80; root /home/putter; index index.php index.html index.htm; server_name www.ruk-com.in.th ruk-com.in.th; location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; } location ~ /\.ht { deny all; } }
แก้ไข Virtual Host ของ Apache
ServerAdmin admin@ruk-com.in.th DocumentRoot /home/putter ServerName www.ruk-com.in.th ErrorLog logs/exruk-com-error_log CustomLog logs/ruk-com-access_log common AllowOverride All
แก้ไข /etc/httpd/conf/httpd.conf ให้ Apache เปิดพอต 8080 แทน
Listen 127.0.0.1:8080
แก้ไข php-fpm ที่ /etc/php-fpm.d/www.conf โดยแก้ user = apache และ group = apache ให้เป็น nginx
; RPM: apache Choosed to be able to access some dir as httpd user = nginx ; RPM: Keep a group allowed to write in log dir. group = nginx
service httpd restart service nginx start service php-fpm restart service mysqld restart chkconfig httpd on chkconfig nginx on chkconfig php-fpm on chkconfig mysqld on