Thứ ba, 26/11/2013 | 00:00 GMT+7

Cách cấu hình cài đặt trang web WordPress đơn và nhiều trang với Nginx

WordPress là CMS (hệ thống quản lý nội dung) phổ biến nhất được sử dụng trên internet hiện nay. Các trang web WordPress có thể được phục vụ bằng server HTTP như Apache hoặc NGINX, trong khi Apache là một lựa chọn tuyệt vời để phục vụ các trang web, nhiều trang web đã chuyển sang NGINX vì kiến trúc hướng sự kiện có thể mở rộng, tài nguyên thấp và phân phối file tĩnh tốt hơn. Trong hướng dẫn này, bạn sẽ học cách cấu hình NGINX cho nhiều loại cài đặt WordPress khác nhau, bao gồm cấu hình nhiều trang, viết lại luật và sử dụng file .conf để áp dụng các cấu hình lặp lại.


Yêu cầu


Trong hướng dẫn này, bạn cần sudo để cài đặt và chỉnh sửa file . Tôi giả sử rằng bạn đã trải qua quá trình cài đặt server ban đầu.

Bạn cần cài đặt MySQL, PHP & NGINX. Bạn có thể làm theo các hướng dẫn này để cài đặt LEMP trên Ubuntu hoặc Debian .

Lưu ý các khối server của ta sẽ khác và trong hướng dẫn này, ta đang làm cho PHP-FPM sử dụng một Ổ cắm UNIX.

Tối ưu hóa NGINX cơ bản


Điều chỉnh các quy trình và kết nối của NGINX Worker


Bạn thường nên đặt số lượng công nhân NGINX bằng số bộ xử lý, bạn có thể xác định số bộ xử lý đang sử dụng:

cat /proc/cpuinfo | grep processor  

Mở file cấu hình NGINX chính:

sudo nano /etc/nginx/nginx.conf 

Tăng hoặc giảm số lượng công nhân tùy thuộc vào thông số kỹ thuật hệ thống của bạn:

worker_processes 1; 

NGINX giới hạn số lượng kết nối mà nhân viên có thể duy trì tại một thời điểm, nếu trang web có nhiều khách truy cập, bạn có thể cần tăng giới hạn kết nối. Về lý thuyết, số lượng kết nối tối đa = công nhân * giới hạn.

worker_connections 768; 

Bật Gzip


Các file có thể được nén bằng cách sử dụng Gzip để tăng tốc WordPress, kích thước dữ liệu mà user yêu cầu càng nhỏ thì phản hồi càng nhanh. Hãy nghĩ về file CSS & file HTML, chúng có nhiều chuỗi tương tự, văn bản lặp lại và khoảng trắng. Gzip sử dụng một thuật toán gọi là DEFLATE để loại bỏ các chuỗi trùng lặp bằng cách liên kết với vị trí trước đó của chuỗi giống hệt đó và tạo một file nhỏ hơn nhiều. Tìm phần Gzip và bật nó:

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; 

Cứu thoát.

Tạo file .conf NGINX


Vì bạn có thể đang lưu trữ nhiều trang web WordPress, ta sẽ tạo một vài file .conf có thể được tải từ các khối server thay vì ghi cùng một cấu hình nhiều lần trên mỗi khối server .

Trong các bước tiếp theo, ta sẽ tạo 3 file sẽ chứa các cấu hình của ta :

  • common.conf: Cấu hình áp dụng cho tất cả các trang web.
  • wordpress.conf: Cấu hình áp dụng cho tất cả các trang web WordPress.
  • multisite.conf: Các cấu hình đặc biệt cho đa trang WordPress với các folder con.

Ta sẽ tạo tất cả các file trong một folder có tên là “chung” nhưng trước tiên ta cần tạo folder được đề cập:

sudo mkdir /etc/nginx/global 

Tôi sẽ đặt / etc / nginx / global làm folder hiện tại chỉ để làm cho mọi thứ dễ dàng hơn.

cd /etc/nginx/global 

tệp common.conf


Hãy tạo file .conf đầu tiên của ta áp dụng cho bất kỳ loại trang web nào.

sudo nano common.conf 

Thao tác này sẽ mở một file trống, sao chép các cấu hình sau:

# Global configuration file. # ESSENTIAL : Configure Nginx Listening Port listen 80; # ESSENTIAL : Default file to serve. If the first file isn't found,  index index.php index.html index.htm; # ESSENTIAL : no favicon logs location = /favicon.ico {     log_not_found off;     access_log off; } # ESSENTIAL : robots.txt location = /robots.txt {     allow all;     log_not_found off;     access_log off; } # ESSENTIAL : Configure 404 Pages error_page 404 /404.html; # ESSENTIAL : Configure 50x Pages error_page 500 502 503 504 /50x.html;     location = /50x.html {         root /usr/share/nginx/www;     } # SECURITY : Deny all attempts to access hidden files .abcde location ~ /\. {     deny all; } # PERFORMANCE : Set expires headers for static files and turn off logging. location ~* ^.+\.(js|css|swf|xml|txt|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 30d; } 

listen 80; chỉ định cổng lắng nghe của server .

index index.php... chỉ định file mặc định để phân phát (WordPress index.php). Nếu file đầu tiên không được tìm thấy, file thứ hai sẽ được sử dụng, v.v. Bạn có thể có các trang web HTML, đó là lý do tại sao ta bao gồm index.html & index.htm ;.

location = /robots.txt {allow all;} cho phép truy cập vào robots.txt, nếu bạn muốn chỉ định một folder khác cho robots.txt, bạn có thể thêm một alias :

location /robots.txt {     alias /var/www/example.com/public/sample_robots.txt; } 

location ~ /\. {deny all;} trong hệ điều hành Linux, một file ẩn bắt đầu bằng dấu “.”, quyền truy cập vào một số file ẩn, chẳng hạn như .htaccess, sẽ bị chặn vì lý do bảo mật.

location ~* ^.+\.(js|css|swf... hết hạn tiêu đề cho trình duyệt biết liệu họ có nên yêu cầu một file cụ thể từ server hay họ nên lấy nó từ bộ nhớ cache của trình duyệt. Khi hết hạn 30 ngày, ta sẽ thông báo cho trình duyệt để lưu trữ các file tĩnh như ảnh trong 30 ngày.

Lưu và thoát.

file wordpress.conf


Hãy tạo một file .conf áp dụng cho tất cả các trang web WordPress:

sudo nano wordpress.conf 

Thao tác này sẽ mở một file trống, sao chép các cấu hình sau:

# WORDPRESS : Rewrite rules, sends everything through index.php and keeps the appended query string intact location / {     try_files $uri $uri/ /index.php?q=$uri&$args; }  # SECURITY : Deny all attempts to access PHP Files in the uploads directory location ~* /(?:uploads|files)/.*\.php$ {     deny all; } # REQUIREMENTS : Enable PHP Support location ~ \.php$ {     # SECURITY : Zero day Exploit Protection     try_files $uri =404;     # ENABLE : Enable PHP, listen fpm sock     fastcgi_split_path_info ^(.+\.php)(/.+)$;     fastcgi_pass unix:/var/run/php5-fpm.sock;     fastcgi_index index.php;     include fastcgi_params; } # PLUGINS : Enable Rewrite Rules for Yoast SEO SiteMap rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last; rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;  #Yeah! you did it. 

try_files $uri $uri/ /index.php?q=$uri&$args yêu cầu viết lại luật để cho phép bạn chọn cấu trúc liên kết cố định tùy chỉnh của bạn trên WordPress.

location ~* /(?:uploads|files)/.*\.php$ {deny all;} điều này sẽ ngăn mã độc được tải lên và thực thi từ folder phương tiện WordPress.

location ~ \.php$ {...} vì WordPress là một trang web php, ta cần cho NGINX biết cách chuyển các tập lệnh php của ta sang PHP5.

try_files $uri =404; đây là luật bảo mật, bạn chỉ muốn cung cấp file php xác định hoặc đi đến lỗi 404.

Các luật khác: Bạn có thể cần thêm nhiều luật NGINX hơn, ví dụ: nếu bạn sử dụng cùng một Plugin WP yêu cầu luật tùy chỉnh trên tất cả các cài đặt của bạn như tôi làm, bạn có thể thêm nhiều luật hơn trong file .conf này, ví dụ: tôi sử dụng Yoast SEO trên tất cả các trang web của tôi do đó tôi đang thêm các luật viết lại được yêu cầu ở đây, theo cách này, tôi không phải sao chép các luật viết lại giống nhau cho mỗi khối server .

file multisite.conf


Không giống như WordPress trang web đơn lẻ, có thể hoạt động với các liên kết cố định “xấu xí” và do đó không cần viết lại URL, cài đặt MultiSite yêu cầu các luật viết lại tùy chỉnh để định dạng URL cho các trang con của bạn. Hãy tạo file .conf áp dụng cho cài đặt WordPress nhiều trang:

sudo nano multisite.conf 

Thao tác này sẽ mở một file trống, sao chép các luật viết lại được yêu cầu:

# Rewrite rules for WordPress Multi-site. if (!-e $request_filename) { rewrite /wp-admin$ $scheme://$host$uri/ permanent; rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last; rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last; } 

Cứu thoát.

Ghi chú nhỏ


Thư mục làm việc hiện tại của ta là / etc / nginx / global , nếu muốn thay đổi, bạn có thể gõ:

cd /desired_directory 

Tạo khối server


Đã đến lúc tạo khối server đầu tiên của ta . Vì ta đã có mọi thứ được cấu hình trong các file .conf của bạn , nên không cần phải sao chép file khối server mặc định. Hãy vô hiệu hóa khối server mặc định:

sudo rm /etc/nginx/sites-enabled/default 

Và tạo một file khối server :

sudo nano /etc/nginx/sites-available/demo 

Thao tác này sẽ mở một file trống, sao chép các cấu hình sau tùy thuộc vào những gì bạn muốn đạt được:

Cài đặt WordPress đơn giản


Hãy tưởng tượng rằng bạn muốn cấu hình một trang web WordPress với domain www.demo.com này . Đầu tiên, ta sẽ phải tạo một server khối server {...} nơi ta sẽ đặt các luật của bạn . Ta phải chỉ định khối server nào được sử dụng cho một URL nhất định, bao gồm common.conf & wordpress.conf và cuối cùng ta sẽ cho NGINX biết vị trí cài đặt WordPress trong server của ta .

server {     # URL: Correct way to redirect URL's     server_name demo.com;     rewrite ^/(.*)$ http://www.demo.com/$1 permanent; } server {     server_name www.demo.com;     root /home/demouser/sitedir;     access_log /var/log/nginx/www.demo.com.access.log;     error_log /var/log/nginx/www.demo.com.error.log;     include global/common.conf;     include global/wordpress.conf; } 

Hãy nhớ thay đổi dữ liệu sau để phù hợp với nhu cầu của bạn:

  • server_name : Xác định khối server nào được sử dụng cho một URL nhất định.
  • root : Đường dẫn nơi trang web được lưu trữ.
  • nhật ký truy cập & log lỗi : Đặt đường dẫn cho log của bạn

Bạn có thể thấy rằng có hai khối server , đó là bởi vì www.demo.com & demo.com là các URL khác nhau. Bạn có thể cần đảm bảo Google, Bing, user ... vv chọn URL mà bạn muốn, trong trường hợp này, tôi muốn trang web của bạn là www.demo.com vì vậy tôi đã cấu hình chuyển hướng vĩnh viễn từ demo.com đến www.demo .com . Cũng có thể chỉ định nhiều domain :

server {     # URL: Correct way to redirect URL's     server_name demo.com sub.demo.com example.com; 

Nhiều trang với các folder con


Nếu bạn muốn cài đặt multisite với các folder con, bạn cần bao gồm các luật viết lại được lưu trữ trong multisite.conf:

# URL: add a permanent redirect if required. server {     server_name www.demo1.com;     root /home/demouser/sitedir1;     access_log /var/log/nginx/www.demo1.com.access.log;     error_log /var/log/nginx/www.demo1.com.error.log;     include global/common.conf;     include global/wordpress.conf;     include global/multisite.conf; } 

Nhiều trang với domain phụ


Nếu bạn muốn cài đặt multisite với các domain phụ, bạn cần cấu hình khối server này để lắng nghe domain có ký tự đại diện:

server {     server_name *.demo2.com;     root /home/demouser/sitedir2;     access_log /var/log/nginx/demo2.com.access.log;     error_log /var/log/nginx/demo2.com.error.log;     include global/common.conf;     include global/wordpress.conf; } 

HTML và các trang web khác


Nếu bạn muốn lưu trữ các trang web html đơn giản hoặc các ứng dụng web khác, bạn có thể cần chỉ định các luật tùy chỉnh hoặc tạo nhiều file .conf hơn và đưa chúng vào khối server :

# URL: add a permanent redirect if required. server {     server_name www.demo3.com;     root /home/demouser/sitedir3;     access_log /var/log/nginx/demo3.com.access.log;     error_log /var/log/nginx/demo3.com.error.log;     # custom rules } 

Nhớ lưu & thoát.

Bật file chặn server


Bước cuối cùng là kích hoạt server lưu trữ bằng cách tạo một softlink giữa folder hỗ trợ trang web và folder hỗ trợ trang web:

sudo ln -s /etc/nginx/sites-available/demo /etc/nginx/sites-enabled/demo 

Ta đã thực hiện rất nhiều thay đổi đối với cấu hình. Reload NGINX và hiển thị các thay đổi.

sudo service nginx reload;  

Ghi chú cuối cùng


Để tạo thêm server ảo, bạn có thể lặp lại quy trình trên, cẩn thận cài đặt root tài liệu mới với domain mới thích hợp mỗi lần. Cũng có thể kết hợp nhiều khối server chỉ trong một file :

server {     server_name demo.com;     rewrite ^/(.*)$ http://www.demo.com/$1 permanent; } server {     server_name www.demo.com;     root /home/demouser/sitedir;     access_log /var/log/nginx/www.demo.com.access.log;     error_log /var/log/nginx/www.demo.com.error.log;     include global/common.conf;     include global/wordpress.conf; }  server {     server_name www.demo1.com;     root /home/demouser/sitedir1;     access_log /var/log/nginx/www.demo1.com.access.log;     error_log /var/log/nginx/www.demo1.com.error.log;     include global/common.conf;     include global/wordpress.conf;     include global/multisite.conf; } # More server blocks.... 

Tags:

Các tin liên quan

Cách triển khai ứng dụng Node.js bằng Systemd và Nginx
2013-11-26
Cách thiết lập server block Nginx trên Debian 7
2013-10-30
Cách thiết lập FastCGI Caching với Nginx trên VPS của bạn
2013-10-29
Cách phân phát nhiều blog ma trên một VPS bằng cách sử dụng server block Nginx
2013-10-21
Cách cài đặt Drupal với Nginx trên VPS Ubuntu 13.04
2013-10-16
Cách cài đặt TTRSS với Nginx cho Debian 7 trên VPS
2013-10-07
Cách biên dịch Nginx từ Nguồn trên VPS CentOS 6.4 x64
2013-09-23
Cách biên dịch Nginx từ Nguồn trên VPS CentOS 6.4 x64
2013-09-23
Cách lưu trữ nhiều ứng dụng Node.js trên một VPS duy nhất với nginx, forever và crontab
2013-09-04
Cách tối ưu hóa Nginx với PHP Pools trên VPS Ubuntu 13.04
2013-08-21