ติดตั้ง WordPress ใช้งานร่วมกับ NGINX MYSQL PHP7 SSL และ Ubuntu 16.04

ยังเขียนไม่เสร็จนะเอาแปะไว้ก่อนเฉยๆ

ครั้งนี้จะขอนำเสนอวิธีการติดตั้ง WordPress ใช้งานร่วมกับ NGINX MYSQL PHP7 SSL และ Ubuntu 16.04 ซึ่งวิธีการก็ไม่ได้ยากอะไรเลยใช้ command ไม่กี่บรรทัดก็สามารถใช้งานได้แล้วครับ

มาเริ่มกันที่ติดตั้ง NGINX กันก่อนเลยครับ

apt-get install python-software-properties

add-apt-repository ppa:nginx/stable

apt-get update

apt-get upgrade

cd /tmp/ && wget http://nginx.org/keys/nginx_signing.key

apt-key add nginx_signing.key

ขั้นตอนนี้จะเป็นการเพิ่ม NGINX software repository เข้าไปใน Ubuntu ถ้าหากต้องการที่จะใช้ NGINX ใหม่ล่าสุดโดยที่ไม่ต้องการอให้ Ubuntu เพิ่มเข้ามาครับ หรือใครจะใช้ของที่ repository Ubuntu ก็พิมพ์ตามนี้เลย

apt-get install nginx

เพิ่ม package address เข้าไปใน source file

nano /etc/apt/sources.list.d/nginx.list

พิมพ์สองบรรทันข้างล่างนี่แล้วก็ save ไว้ครับ

deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx

deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx

apt-get update && sudo apt-get install nginx

หลังจากที่ติดตั้ง nginx เรียบร้อยแล้วก็เช็คดูหน่อยว่า nginx ลงเรียบร้อยแล้วโดยพิมพ์

nginx –v

จะลองเข้า URL หรือ IP ของเครื่องเพื่อทดสอบดูก็ได้ครับ

หลังจากติดตั้ง nginx เรียบร้อยแล้วก็มาติดตั้ง MYSQL กันครับเนื่องจากผู้เขียนคุ้นชินกับ MYSQL มาหลายปีเลยใช้ DB ตัวนี้เป็นตัวหลักแต่ถ้าใครถนัด DB ตัวอื่นก็สามารถใช้ได้เหมือนกันครับ

apt-get install mysql-server

สำหรับ Ubuntu 16.04 นั้นจะได้ mysql-server เวอร์ชั่น 5.7 มาเลยครับ

ระหว่าง install mysql ก็จะถาม root password ก็ใส่ root password เข้าไประครับรอสักครู่ก็ติดตั้งเสร็จแล้ว

Repeat password เพื่อให้แน่ใจว่าพิมพ์ถูก

หลังจากที่ติดตั้ง mysql-server แล้วต่อมาก็ติดตั้ง php กันครับใน Ubuntu 16.04 ก็มี PHP7 มาเรียบร้อยแล้วหรืออยากจะได้โดยตรงก็สามารถเพิ่ม php repository เข้าไปได้ครับในบทความนี้จะใช้จาก Ubuntu แต่จะเขียนวิธีการเพิ่ม php repository แนะนำให้ด้วย

add-apt-repository ppa:ondrej/php
apt-get update

ตามวิธีการข้างบนเราก็ได้ php repository มาแอดไว้ในเครื่องเรียบร้อยแล้ว

สำหรับ package PHP ที่ต้องใช้สำหรับ wordpress ก็มีตามนี้ครับ

sudo apt-get install php-fpm php-common php-xmlrpc php-curl php-gd php-imagick php-cli php-pear php-dev php-imap php-mcrypt php-mysql

เช็คว่า php ติดตั้งเรียบร้อยโดยกดเช็คเวอร์ชั่นของ php

php –v

 

หลังจากที่เตรียม software ในเครื่องเรียบร้อยแล้วทีนี้เราก็ต้องมา config กับ แล้ววิธีก็ตามนี้เลยเริ่มจาก mysql ก่อน

mysql_secure_installation

 

 

สำหรับ mysql server 5.7 นั้นจะมีการเพิ่ม password validate plugin เพิ่มเข้ามาถ้าหากต้องการจะใช้ก็ตอบ y ในบทความนี้จะตอบ yes

จะมีระดับความแข็งแรงของ password อยู่ทั้งหมด 3 ระดับบ LOW MEDIUM และ STRONG ตามภาพเลยครับในบทความนี้จะเลือก MEDIUM คือ 1

Mysql server จะถามว่าต้องการเปลี่ยน root password หรือไม่ เราจะต้อง no โดยการกดปุ่มไหนก็ได้

หลังจากนั้นจะมีการถามว่าจะลบ anonymous user หรือไม่ตอบ yes เพื่อทำการ remove anonymous user

ในขั้นตอนนี้ mysql จะถามว่าต้องการปิดการอนุญาตให้ root สามารถ remote login มาจากเครื่องอื่นได้หรือไม่คำตอบคือ y

หลังจากนั้นจะมีถามว่าจะลบ test database และ reload privilege table ให้ตอบ y ทั้งสองข้อ ข้อความสุดท้ายจะเขียนว่า All done แสดงว่าทุกอย่างเรียบร้อยแล้ว

ต่อมาเราจะ config nginx กันครับ

เริ่มจาก global config ของ nginx ก่อนเลย

cd /etc/nginx/

mv nginx.conf nginx.conf.bk

nano nginx.conf

สำหรับใครที่มี config ของตัวเองอยู่ในใจแล้วไม่จำเป็นต้องใช้ตามบทความนี้ก็ได้

user  www-data;

worker_processes  auto;

error_log  /var/log/nginx/error.log warn;

pid        /var/run/nginx.pid;

 

events {

worker_connections  1024;

use epoll;

multi_accept on;

}

 

 

http {

server_names_hash_bucket_size 64;

include       /etc/nginx/mime.types;

default_type  application/octet-stream;

 

log_format  main  ‘$remote_addr – $remote_user [$time_local] “$request” ‘

‘$status $body_bytes_sent “$http_referer” ‘

‘”$http_user_agent” “$http_x_forwarded_for”‘;

 

#include     /etc/nginx/fastcgi.conf;

 

error_log   /var/log/nginx/error.log;

access_log  /var/log/nginx/access.log  main;

 

sendfile       on;

tcp_nopush     on;

limit_conn_zone $binary_remote_addr zone=arbeit:10m;

 

client_body_timeout             60;

client_header_timeout           60;

keepalive_timeout            10 10;

send_timeout                    60;

 

reset_timedout_connection on;

client_max_body_size 10m;

tcp_nodelay on;

 

## No need for regexps. See

## http://wiki.nginx.org/NginxHttpGzipModule#gzip_disable

 

include /etc/nginx/conf.d/*.conf;

 

upstream php-handler {

 

server unix:/var/run/php7.0-fpm.sock;

}

}

ต่อมาก็จะเป็นในส่วนของ config ของเวปเราแล้วครับ

cd /etc/nginx/conf.d/

nano wordpress.conf

[email protected]:/etc/nginx/conf.d# cat default.conf

server {

listen 80;

server_name example.com; #เปลี่ยนชื่อเวปไซต์ตามที่ต้องการ

return 301 https:// example.com;  #redirect ไปตาม website ที่ต้องการ

}

 

server {

 

listen 443 ssl http2; # Activate SPDY for SSL connections

server_name example.com; #เปลี่ยนชื่อเวปไซต์ตามที่ต้องการ

ssl on;

ssl_certificate /etc/letsencrypt/live/example.com /fullchain.pem;

ssl_certificate_key etc/letsencrypt/live/ example.com /privkey.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_dhparam /etc/ssl/nginx/dhparam.pem;

server_tokens off;

ssl_prefer_server_ciphers on;

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;

#ssl_ciphers ECDHE-ECDSA-AES256-SHA

index index.php index.html index.htm;

# Path to the root of your installation

root /var/www/html;

access_log  off;

error_log off;

 

gzip              on;

gzip_buffers      16 8k;

gzip_comp_level   5;

gzip_http_version 1.1;

gzip_min_length   10;

gzip_types        text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon application/vnd.ms-fonto$

gzip_vary         on;

gzip_proxied      any; # Compression for all requests.

 

 

 

location = /robots.txt {

allow all;

log_not_found off;

access_log off;

}

 

location ~ /\. {

deny all;

}

 

location / {

#try_files $uri $uri/ =404;

try_files $uri $uri/ /index.php?q=$uri&$args;

}

location ~* /(?:uploads|files)/.*\.php$ {

deny all;

}

 

 

error_page 404 /404.html;

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root /usr/share/nginx/html;

}

 

location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {

access_log off; log_not_found off; expires max;

}

 

 

# Add headers to serve security related headers

add_header Strict-Transport-Security “max-age=15768000; includeSubDomains; preload;”;

add_header X-Content-Type-Options nosniff;

add_header X-Frame-Options “SAMEORIGIN”;

add_header X-XSS-Protection “1; mode=block”;

add_header X-Robots-Tag none;

 

index index.php index.html index.htm;

 

location ~ \.php(?:$|/) {

try_files $uri =404;

fastcgi_split_path_info ^(.+\.php)(/.+)$;

fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

#fastcgi_buffering off;

#fastcgi_request_buffering off;

#uwsgi_request_buffering off;

#fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=WORDPRESS:500m inactive=60m;

#fastcgi_cache_key “$scheme$request_method$host$request_uri”;

#fastcgi_cache_use_stale error timeout invalid_header http_500;

}

 

#location / {

#try_files /wp-content/cache/supercache/$http_host/$scheme$cache_uri/index.html $uri $uri/ /index.php?$args ;

#}

 

 

}

สำหรับใครที่มี config ของตัวเองอยู่ในใจแล้วไม่จำเป็นต้องใช้ตามบทความนี้ก็ได้

ต่อมาเราต้องติดตั้ง SSL Certificate ในบทความนี้จะใช้ของ Let’s Encrypted สามารถอ่านได้จาก Link นี้เลยครับ

ติดตั้ง Let’s Encrypt Free SSL Certificate

 

Leave a Reply

Your email address will not be published. Required fields are marked *