ติดตั้งเว็บเซิฟเวอร์ด้วย NGINX+APACHE+PHP+MYSQL (CENTOS 6.4)

ติดตั้งเว็บเซิฟเวอร์ด้วย NGINX+APACHE+PHP+MYSQL (CENTOS 6.4)


ในปัจจุบันระบบเว็บเซิฟเวอร์ที่นิยมที่สุดในบ้านเราก็น่าจะเป็น 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 [email protected]
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

ที่มา
https://www.digitalocean.com/community/articles/how-to-install-linux-nginx-mysql-php-lemp-stack-on-centos-6