Home / Operating System / Linux / Centminmod & WordPress: Thiết lập NGINX cho WordPress

Centminmod & WordPress: Thiết lập NGINX cho WordPress

Sau khi cài WordPress trên VPS NGINX thì có thể bạn sẽ gặp vấn đề khi sử dụng permalink, đó là các link đều chuyển sang lỗi 404 không tìm thấy phải không nào.

Không giống như Apache, mặc định WordPress không tự thiết lập cho NGINX, bao gồm thiết lập rewrite đường dẫn nên sẽ xảy ra lỗi 404 khi dùng permalink. Trong khuôn khổ bài này, mình sẽ hướng dẫn bạn thiết lập NGINX căn bản dành cho WordPress, bao gồm các thiết lập bắt buộc và thiết lập cache.

1. Thiết lập NGINX cơ bản

Ở phần này chúng ta sẽ fix lỗi rewrite đường dẫn của WordPress. Lưu ý là ở một số bước tạo file .conf thì chúng ta chỉ làm một lần, sau này nếu có add thêm domain vào VPS thì bạn chỉ cần include file config đó vào file config của domain mà thôi, rất tiện lợi.

Hãy sử dụng WinSCP hoặc CyberDuck để đăng nhập vào VPS thông qua giao thức sFTP, giao thức này chúng ta sẽ sử dụng tài khoản root của VPS.

Sau đó tìm đến thư mục /usr/local/nginx/conf/conf.d

Ở thư mục này, bạn sẽ thấy có 1 file tên là domain.com.conf, trong đó domain.com là địa chỉ website mà bạn đã thêm vào VPS. Khi mở ra thì nội dung file đó sẽ như thế này:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  server_name domain.com www.domain.com;
# ngx_pagespeed & ngx_pagespeed handler
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;
  # limit_conn limit_per_ip 16;
  # ssi  on;
  access_log /home/nginx/domains/abc.com/log/access.log combined buffer=32k;
  error_log /home/nginx/domains/abc.com/log/error.log;
  root /home/nginx/domains/abc.com/public;
  location / {
# block common exploits, sql injections etc
#include /usr/local/nginx/conf/block.conf;
  # Enables directory listings when index file not found
  #autoindex  on;
  # Shows file listing times as local time
  #autoindex_localtime on;
  # Enable for vBulletin usage WITHOUT vbSEO installed
  #try_files             / /index.php;
  }
  include /usr/local/nginx/conf/staticfiles.conf;
  include /usr/local/nginx/conf/php.conf;
  include /usr/local/nginx/conf/drop.conf;
  #include /usr/local/nginx/conf/errorpage.conf;
}

Ngay tại dòng # ngx_pagespeed & ngx_pagespeed handler, bạn viết vào bên trên nó như sau:

1
include /usr/local/nginx/conf/wordpress/general.conf

wpnginx-includeconfigfile

 

Đồng thời xóa luôn đoạn này trong file:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
  location / {
# block common exploits, sql injections etc
#include /usr/local/nginx/conf/block.conf;
  # Enables directory listings when index file not found
  #autoindex  on;
  # Shows file listing times as local time
  #autoindex_localtime on;
  # Enable for vBulletin usage WITHOUT vbSEO installed
  #try_files             / /index.php;
  }

Sau đó, quay trở lại thư mục /usr/local/nginx/conf và tạo thêm một thư mục tên là wordpress.

wpnginx-createwpfolder

Sau đó tạo một file mang tên general.conf trong thư mục wordpress với nội dung như sau:

01
02
03
04
05
06
07
08
09
10
11
12
13
# Thiết lập rewrite đường dẫn cho WordPress
location / {
try_files $uri $uri/ /index.php?$args;
}
# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
# Cache các file tĩnh với thời gian tối đa, tối ưu tốc độ.
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;
}

Sau đó tiến hành vào SSH và gõ lệnh sau để khởi động lại NGINX:

1
service nginx restart

Cuối cùng là vào WordPress -> Settings -> Permalink và thiết lập cấu trúc đường dẫn cho mình thôi. :D

Cách sử dụng sau này

Chỉ cần làm lại bước include file general.conf vào file config của domain trên VPS mà bạn làm ở bước đầu tiên là được.

2. Kích hoạt APC Opcode

Về lợi ích của APC Opcode Cache mình đã có nói tại đây. Với một tính năng hữu ích như thế này, không có lý do nào mà Centminmod không tích hợp vào script của họ cả.

Đầu tiên bạn mở SSH lên, và chạy menu của Centminmod:

1
2
3
cd /usr/local/src/centmin-v1.2.3mod
./centmin.sh

Sau đó chọn tùy chọn số 9 và ấn Enter là xong.

Bây giờ APC đã có trong VPS, chỉ việc chỉ định cho WordPress sử dụng cache từ APC mà thôi. Nhưng bước này chúng ta sẽ làm ở phần 3 với W3 Total Cache nhé.

3. Cài đặt W3 Total Cache tối ưu

Lại vào sFTP, vào thư mục /usr/local/nginx/conf/wordpress và tạo một thư mục tên w3total.conf với nội dung như sau:

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
#W3 TOTAL CACHE CHECK
set $cache_uri $request_uri;
# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
        set $cache_uri 'null cache';
}
if ($query_string != "") {
        set $cache_uri 'null cache';
}  
# Don't cache uris containing the following segments
if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|+-sitemap([0-9]+)?.xml)") {
        set $cache_uri 'null cache';
}  
# Don't use the cache for logged in users or recent commenters
if ($http_cookie ~* "comment_author|wordpress_+|wp-postpass|wordpress_logged_in") {
        set $cache_uri 'null cache';
}
# BEGIN W3TC Minify cache
location ~ /wp-content/cache/minify.*.js$ {
    types {}
    default_type application/x-javascript;
    add_header Vary "Accept-Encoding";
}
location ~ /wp-content/cache/minify.*.css$ {
    types {}
    default_type text/css;
    add_header Vary "Accept-Encoding";
}
location ~ /wp-content/cache/minify.*js.gzip$ {
    gzip off;
    types {}
    default_type application/x-javascript;
    add_header Vary "Accept-Encoding";
    add_header Content-Encoding gzip;
}
location ~ /wp-content/cache/minify.*css.gzip$ {
    gzip off;
    types {}
    default_type text/css;
    add_header Vary "Accept-Encoding";
    add_header Content-Encoding gzip;
}
# END W3TC Minify cache
# BEGIN W3TC Page Cache cache
location ~ /wp-content/cache/page_enhanced.*html$ {
    add_header Vary "Accept-Encoding, Cookie";
}
location ~ /wp-content/cache/page_enhanced.*gzip$ {
    gzip off;
    types {}
    default_type text/html;
    add_header Vary "Accept-Encoding, Cookie";
    add_header Content-Encoding gzip;
}
# END W3TC Page Cache cache
# BEGIN W3TC Browser Cache
gzip on;
gzip_types text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
# END W3TC Browser Cache
# BEGIN W3TC Minify core
rewrite ^/wp-content/cache/minify.*/w3tc_rewrite_test$ /wp-content/plugins/w3-total-cache/pub/minify.php?w3tc_rewrite_test=1 last;
set $w3tc_enc "";
if ($http_accept_encoding ~ gzip) {
    set $w3tc_enc .gzip;
}
if (-f $request_filename$w3tc_enc) {
    rewrite (.*) $1$w3tc_enc break;
}
rewrite ^/wp-content/cache/minify/(.+/[X]+.css)$ /wp-content/plugins/w3-total-cache/pub/minify.php?test_file=$1 last;
rewrite ^/wp-content/cache/minify/(.+.(css|js))$ /wp-content/plugins/w3-total-cache/pub/minify.php?file=$1 last;
# END W3TC Minify core
# BEGIN W3TC Page Cache core
set $w3tc_rewrite 1;
if ($request_method = POST) {
    set $w3tc_rewrite 0;
}
if ($query_string != "") {
    set $w3tc_rewrite 0;
}
if ($request_uri !~ /$) {
    set $w3tc_rewrite 0;
}
if ($http_cookie ~* "(comment_author|wp-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle)") {
    set $w3tc_rewrite 0;
}
if ($http_cookie ~* "(w3tc_preview)") {
    set $w3tc_rewrite _preview;
}
set $w3tc_enc "";
if ($http_accept_encoding ~ gzip) {
    set $w3tc_enc _gzip;
}
if (!-f "$document_root/wp-content/cache/page_enhanced/$http_host/$request_uri/_index$w3tc_rewrite.html$w3tc_enc") {
  set $w3tc_rewrite 0;
}
if ($w3tc_rewrite = 1) {
    rewrite .* "/wp-content/cache/page_enhanced/$http_host/$request_uri/_index$w3tc_rewrite.html$w3tc_enc" last;
}
# END W3TC Page Cache core
# Use cached or actual file if they exists, otherwise pass request to WordPress
location / {
        try_files /wp-content/w3tc/pgcache/$cache_uri/_index.html $uri $uri/ /index.php?$args ;
}

Sau đó, mở file domain.com.conf trong thư mục conf.d lên và sửa như sau:

wpnginx-includew3total-1

Nghĩa là bạn sẽ không sử dụng file general.conf (thêm dấu # vào trước) nữa mà sẽ sử dụng file w3total.conf.

Bây giờ vào lại SSH và khởi động lại NGINX:

1
service nginx restart

Tiếp tục vào WordPress cài plugin W3 Total Cache vào và thiết lập tại tab General như sau:

Page Cache:

  • Enable
  • Basic

Minify:

  • Enable
  • Auto
  • Disk
  • Default
  • Default

Database Cache: Để nguyên, không dùng.

Object Cache:

  • Enable
  • APC

Còn lại để nguyên hết nhé.

Ấn vào nút Save All Settings bất kỳ và ra ngoài trang chủ xem kết quả, nếu nó vẫn truy cập được vào site bình thường thì làm thành công, thử vào các bài viết nếu vẫn vào được thì thành công. Lưu ý lần đầu tiên load hơi lâu nếu bạn có ít RAM do nó phải lưu cache trước.

Về việc ở phần Page Cache mình chọn Basic mà không chọn Disk là vì mình cấu hình mãi mà nó không rewrite đường dẫn W3 Total Cache ở NGINX được nên dành sử dụng cái Basic :(

4. KÍch hoạt ngx_pagespeed

Cái này không bắt buộc, bạn làm cũng được. Làm thì tối ưu tốc độ hơn tí nhưng hơi phiền phức cho mấy bạn thích sửa CSS hay Javascript vì nó cache file tĩnh lại mà muốn xóa cache phải sử dụng lệnh trong SSH.

Các bạn vào thư mục /usr/local/nginx/conf/conf.d và mở file cấu hình của domain cần kích hoạt lên rồi tìm đoạn dưới đây

1
2
3
4
# ngx_pagespeed & ngx_pagespeed handler
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;

Xóa đi 3 dấu # ở cuối đi ta có:

1
2
3
4
# ngx_pagespeed & ngx_pagespeed handler
include /usr/local/nginx/conf/pagespeed.conf;
include /usr/local/nginx/conf/pagespeedhandler.conf;
include /usr/local/nginx/conf/pagespeedstatslog.conf;

Chạy thêm lệnh sau ở SSH:

1
pscontrol on

Và cuối cùng là khởi động NGINX

1
service nginx restart

Ok, bây giờ hãy vào website và kiểm tra source xem các file JS, CSS nó được nén lại chưa nhé.

Cách xóa cache ngx_pagespeed

Chỉ cần gõ lệnh sau vào SSH là được.

1
touch /var/ngx_pagespeed_cache/cache.flush

5. Đổi đường dẫn đăng nhập admin trên NGINX

Mở file domain.com.conf ra và chèn đoạn dưới đây ngay bên trên # ngx_pagespeed & ngx_pagespeed handler

1
rewrite ^/dangnhap/?$ /wp-login.php?$query_string break;

Thay chữ dangnhap thành slug mà bạn cần đổi để thay cho /wp-admin.

Kết thúc phần 5

Phần này có lẽ hơi dài vì có quá nhiều điều cần thiết lập, nhưng mình đảm bảo rằng các thiết lập trên sẽ giúp website WordPress của bạn chạy khá tối ưu trên VPS mặc dù mình hơi thất bại trong việc thiết lập cache dạng Disk cho W3 Total Cache ở NGINX nhưng nếu VPS bạn có hơn 1GB RAM, việc lưu cache vào file PHP để APC nó xử lý cũng là một hướng khá hiệu quả.

Trong phần kế tiếp, mình sẽ hướng dẫn bạn đưa một website từ host khác về VPS sử dụng Centminmod.

Print Friendly

About dongpolice

Check Also

Tạo USB Cài Linux tự động

Bạn sẽ không còn tốn thời gian để ngồi tạo từng USB cài đặt các …