Sử dụng Sub domain dưới dạng Sub folder với Nginx

0
1833
(Last Updated On: Th12 16, 2017)

Chào các bạn, như trên VnGeek.com mà các bạn đã truy cập. Vừa có nội dung chữ vừa có trang chứa các videos. Và mình chỉ dùng duy nhất Top-level domain là vngeek.com. Với địa chỉ dẫn đến trang Videos là https://vngeek.com/videos.

Mới đầu mình sử dụng subfolder cho trang videos, và tất nhiên khi đó mình phải tải thêm một lần source wordpress vào folder videos nằm trong folder chứa trang chủ vngeek.com.

Và mình cấu hình tập tin Virtual host cho nginx cho subfolder như sau:

        }
        location /videos/ {
        index index.php;
        try_files $uri $uri/ /videos/index.php?$args;
}

Tuy nhiên vấn đề phát sinh đó là mình muốn tận dụng thêm một máy chủ khác mà mình đang có để chạy trang Videos thì không thể nào tiếp tục sử dụng trang Videos dưới subfolder nữa.

Mình nghĩ đến việc tạo một subdomain là videos.vngeek.com để làm trang chứa videos. Tuy nhiên khi đó khi truy cập trang web lại chia thành hai địa chỉ mới:

  • https://vngeek.com
  • https://videos.vngeek.com

Vấn đề thì cũng chẳng là bao bởi vì mình vẫn thực hiện quá trình Single Sign On trên hai trang này. Người dùng chỉ cần đăng ký tài khoản trên trang https://vngeek.com là có thể đăng nhập vào https://videos.vngeek.com. Nhưng thật sự thì qua bao lâu nay sử dụng một subdomain khác thì các máy chủ tìm kiếm sẽ coi mỗi subdomain là một site khác nhau, do đó ít nhiều sẽ ảnh hưởng đến SEO lâu dài về sau (cái này mình không dám chắc chắn nhưng có nhiều bài viết trên mạng đã đánh giá việc sử dụng subfolder và subdomain cho các giá trị SEO là khác nhau).

Nhưng nếu quay trở lại việc dùng subfolder thì mình lại không muốn vì mình muốn tận dụng sức mạnh của một máy chủ khác nữa, như thế vừa tăng hiệu suất cho máy chủ hiện tại vừa đảm bảo site Videos có die thì cũng không ảnh hưởng đến trang web chính.

Thế là mình quyết định sử dụng Nginx làm Proxy để sử dụng subdomain như một subfolder.

Và đây là phần thiết lập Nginx Reverse sub folder to sub domain:

        location ^~ /videos/ {
 proxy_pass https://videos.vngeek.com/;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect    off;
}

Tất nhiên mình cài đặt lại trang Videos trên địa chỉ subdomain là https://videos.vngeek.com bình thường. Tuy nhiên nếu các bạn chỉ viết lại trong Nginx thì chưa đủ đâu vì khi Proxy các Request đến với trang Videos ở địa chỉ https://videos.vngeek.com thì cơ sở dữ liệu và các cấu hình được thiết đặt cho https://videos.vngeek.com chứ không phải trang https://vngeek.com/videos.

Do đó các bạn cần phải chỉnh sửa trong Database, Các bạn vào table wp_options chỉnh sửa mục siteurlhome trong option_name thành địa chỉ trang videos là: https://vngeek.com/videos

(Ở đây mình đang hướng dẫn và lấy ví dụ thực tế mà mình đã thiết lập ở site mình, chứ không nhất thiết phải cấu hình giống như mình).

Tiếp tục chỉnh sửa tập tin wp-config.php:

/**
* WordPress Localized Language, defaults to English.
*
* Change this to localize WordPress. A corresponding MO file for the chosen
* language must be installed to wp-content/languages. For example, install
* de_DE.mo to wp-content/languages and set WPLANG to 'de_DE' to enable German
* language support.
*/
define('WPLANG', '');
define('WP_HOME','https://vngeek.com/videos');
define('WP_SITEURL','https://vngeek.com/videos');

Sau đó các bạn đăng nhập vào trang quản lý WordPress, trong phần General, Save lại các cài đặt một lần nữa để WordPress cập nhật địa chỉ mới cho trang.

Làm tương tự như vậy ở phần Permalink.

Nếu có xuất hiện lỗi 502 từ Nginx, các bạn disable SElinux trên máy chủ được proxy đến:

setsebool httpd_can_network_connect 1 -P

setsebool -P httpd_can_network_connect true

Hoặc các bạn chỉnh sửa tập tin /etc/selinux/config:

nano /etc/selinux/config

Các bạn đổi SELINUX=permissive thành SELINUX=enforcing

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
# default - equivalent to the old strict and targeted policies
# mls     - Multi-Level Security (for military and educational use)
# src     - Custom policy built from source
SELINUXTYPE=default

# SETLOCALDEFS= Check local definition changes
SETLOCALDEFS=0

Sau đó đừng quên khởi động lại nginx:

service nginx restart

Đối với các bạn di dời từ sub domain sang sub folder mới mà không phải cài mới từ đầu thì các cần phải cập nhật lại cơ sở dữ liệu. Đơn giản nhất đó là các bạn sao lưu cơ sở dữ liệu hiện tại về, và cập nhật bằng tính năng Replace bằng Notepad++.

Chúc các bạn thành công!

Bình luận