Apache và Nginx là hai máy chủ web mã nguồn mở phổ biến thường được sử dụng cùng với PHP. Việc chạy đồng thời cả hai trên cùng một máy ảo có thể rất hữu ích khi bạn lưu trữ nhiều trang web với các yêu cầu khác nhau. Giải pháp tổng quát để chạy hai máy chủ web trên cùng một hệ thống là sử dụng nhiều địa chỉ IP hoặc các cổng khác nhau.
Các máy chủ có cả địa chỉ IPv4 và IPv6 có thể được cấu hình để phục vụ các trang Apache trên một giao thức và các trang Nginx trên giao thức kia, nhưng giải pháp này hiện không khả thi do việc áp dụng IPv6 của các nhà cung cấp dịch vụ internet vẫn chưa phổ biến. Một giải pháp khác là sử dụng số cổng khác như 81 hoặc 8080 cho máy chủ web thứ hai, tuy nhiên việc chia sẻ URL kèm số cổng (ví dụ: http://your_domain:81
) không phải lúc nào cũng hợp lý hoặc lý tưởng.
Nếu bạn đang tìm kiếm giải pháp tối ưu hóa website, việc cấu hình Nginx làm Reverse Proxy cho Apache trên Ubuntu 20.04 là lựa chọn tuyệt vời. Để triển khai hiệu quả, hãy khám phá VPS giá rẻ tại DataOnline, đảm bảo hiệu suất cao với chi phí tiết kiệm nhất.
Trong bài hướng dẫn này, bạn sẽ cấu hình Nginx vừa làm máy chủ web vừa làm reverse proxy cho Apache – tất cả trên một máy chủ duy nhất.
Tùy thuộc vào ứng dụng web, có thể cần thay đổi mã nguồn để Apache nhận biết reverse proxy, đặc biệt khi cấu hình các trang SSL. Để tránh điều đó, bạn sẽ cài đặt một module của Apache có tên mod_rpaf; module này sẽ viết lại một số biến môi trường để máy chủ Apache có vẻ như đang xử lý trực tiếp các yêu cầu từ khách hàng.
Chúng ta sẽ lưu trữ bốn tên miền trên một máy chủ. Hai tên miền sẽ được phục vụ bởi Nginx:
-
nginx1.your_domain (virtual host mặc định)
-
nginx2.your_domain
Hai tên miền còn lại, apache1.your_domain và apache2.your_domain, sẽ được phục vụ bởi Apache. Chúng ta cũng sẽ cấu hình Apache để phục vụ các ứng dụng PHP sử dụng PHP-FPM, mang lại hiệu năng tốt hơn so với mod_php.
Yêu cầu
Để hoàn thành bài hướng dẫn này, bạn cần:
-
Một máy chủ Ubuntu 20.04 mới được cấu hình theo bài Thiết lập máy chủ ban đầu với Ubuntu 20.04, có tài khoản người dùng không phải root với quyền sudo và đã bật firewall.
-
Bốn tên miền đầy đủ (fully-qualified domain names) được cấu hình để trỏ về địa chỉ IP của máy chủ. Nếu bạn quản lý DNS ở nơi khác, hãy tạo các bản ghi A phù hợp.
Bước 1 – Cài đặt Apache và PHP-FPM
Chúng ta hãy bắt đầu bằng việc cài đặt Apache và PHP-FPM.
Ngoài Apache và PHP-FPM, chúng ta còn cài đặt module Apache PHP FastCGI, libapache2-mod-fastcgi
, để hỗ trợ các ứng dụng web FastCGI.
Đầu tiên, hãy cập nhật danh sách gói của bạn để đảm bảo rằng bạn có các gói mới nhất.
sudo apt update
Tiếp theo, cài đặt Apache và PHP-FPM:
sudo apt install apache2 php-fpm
Module FastCGI của Apache không có sẵn trong kho của Ubuntu, do đó bạn cần tải về từ kernel.org và cài đặt bằng lệnh dpkg:
wget https://mirrors.edge.kernel.org/ubuntu/pool/multiverse/liba/libapache-mod-fastcgi/libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb sudo dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb
Bước 2 – Cấu hình Apache và PHP-FPM
Trong bước này, chúng ta sẽ thay đổi số cổng mặc định của Apache thành 8080 và cấu hình để Apache làm việc với PHP-FPM thông qua module mod_fastcgi.
-
Đổi tên file cấu hình cổng của Apache:
sudo mv /etc/apache2/ports.conf /etc/apache2/ports.conf.default
-
Tạo file ports.conf mới với cổng 8080:
echo "Listen 8080" | sudo tee /etc/apache2/ports.conf
Lưu ý: Máy chủ web thường được cấu hình để lắng nghe trên 127.0.0.1:8080 khi dùng reverse proxy, nhưng cách này sẽ khiến biến môi trường PHP SERVER_ADDR nhận giá trị là IP loopback thay vì IP công khai của máy chủ. Mục tiêu của chúng ta là cấu hình Apache sao cho các website của nó không nhận biết có reverse proxy phía trước.
Do vậy, chúng ta sẽ cấu hình Apache lắng nghe trên cổng 8080 trên tất cả các địa chỉ IP.
-
Tạo file virtual host cho Apache:
-
Vô hiệu hóa virtual host mặc định:
sudo a2dissite 000-default
-
Sao chép file virtual host mặc định để tạo file mới:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/001-default.conf
-
Mở file mới để chỉnh sửa:
sudo nano /etc/apache2/sites-available/001-default.conf
-
Thay đổi số cổng trong file thành 8080. File sẽ có nội dung như sau:
Lưu file và kích hoạt virtual host mới:
sudo a2ensite 001-default
-
Tải lại Apache:
sudo systemctl reload apache2
-
Cài đặt gói net-tools (chứa lệnh netstat):
sudo apt install net-tools
-
Kiểm tra Apache đang lắng nghe trên cổng 8080:
sudo netstat -tlpn
Output (ví dụ):
Khi xác nhận Apache đang lắng nghe trên cổng đúng, tiến hành cấu hình hỗ trợ cho PHP và FastCGI.
Bước 3 – Cấu hình Apache để sử dụng mod_fastcgi
Mặc định, Apache phục vụ các trang PHP bằng mod_php, nhưng cần cấu hình thêm để làm việc với PHP-FPM.
Lưu ý: Nếu bạn thử bài hướng dẫn này trên một cài đặt LAMP hiện có sử dụng mod_php, hãy vô hiệu hóa nó trước bằng: sudo a2dismod php7.4
Chúng ta sẽ thêm một khối cấu hình cho mod_fastcgi, phụ thuộc vào mod_action. Vì mod_action bị vô hiệu hóa theo mặc định, trước tiên hãy kích hoạt nó:
sudo a2enmod actions
Sau đó, đổi tên file cấu hình FastCGI hiện có:
sudo mv /etc/apache2/mods-enabled/fastcgi.conf /etc/apache2/mods-enabled/fastcgi.conf.default
Tạo file cấu hình mới:
sudo nano /etc/apache2/mods-enabled/fastcgi.conf
Thêm các chỉ thị sau để chuyển các yêu cầu file .php tới PHP-FPM UNIX socket:
<IfModule mod_fastcgi.c> AddHandler fastcgi-script .fcgi FastCgiIpcDir /var/lib/apache2/fastcgi AddType application/x-httpd-fastphp .php Action application/x-httpd-fastphp /php-fcgi Alias /php-fcgi /usr/lib/cgi-bin/php-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php-fcgi -socket /run/php/php7.4-fpm.sock -pass-header Authorization <Directory /usr/lib/cgi-bin> Require all granted </Directory> </IfModule>
Lưu file, sau đó kiểm tra cấu hình:
sudo apachectl -t
Nếu có thông báo “Syntax OK”, tải lại Apache:
sudo systemctl reload apache2
Bước 4 – Kiểm tra chức năng PHP
Để kiểm tra PHP hoạt động, tạo file phpinfo() trong thư mục /var/www/html
:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
Lưu ý: Nếu bạn đã thiết lập firewall theo hướng dẫn ban đầu, có thể bạn đã bật firewall cho Apache. Hãy cho phép cổng 8080 trước khi kiểm tra. Trong Bước 10, chúng ta sẽ hạn chế truy cập công khai tới cổng này.
Cho phép cổng 8080 qua firewall:
sudo ufw allow 8080
Để cho phép lưu lượng truy cập HTTPS, cho phép “Apache Full” (bao gồm cổng 80 và 443):
sudo ufw allow "Apache Full"
Kiểm tra trạng thái firewall:
sudo ufw status
Output (ví dụ):
Mở trình duyệt và truy cập:http://your_server_ip:8080/info.php
Trang phpinfo() sẽ hiển thị các cài đặt của PHP. Kiểm tra xem ở đầu trang mục “Server API” có ghi “FPM/FastCGI” và ở phần “PHP Variables” biến SERVER_SOFTWARE hiển thị “Apache on Ubuntu”. Điều này xác nhận mod_fastcgi đang hoạt động và Apache sử dụng PHP-FPM để xử lý file PHP.
Bước 5 – Tạo Virtual Hosts cho Apache
Hãy tạo các file virtual host cho Apache cho các tên miền apache1.your_domain và apache2.your_domain. Để thực hiện điều này, trước tiên chúng ta sẽ tạo các thư mục Document Root cho cả hai trang và đặt một số file mặc định vào các thư mục đó để dễ dàng kiểm tra cấu hình.
-
Tạo thư mục Document Root cho cả hai trang:
sudo mkdir -v /var/www/apache1.your_domain /var/www/apache2.your_domain
-
Tạo file index cho mỗi trang:
echo "<h1 style='color: green;'>Apache 1</h1>" | sudo tee /var/www/apache1.your_domain/index.html echo "<h1 style='color: red;'>Apache 2</h1>" | sudo tee /var/www/apache2.your_domain/index.html
-
Tạo file phpinfo() cho mỗi trang:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/apache1.your_domain/info.php echo "<?php phpinfo(); ?>" | sudo tee /var/www/apache2.your_domain/info.php
-
Tạo file virtual host cho apache1.your_domain:
sudo nano /etc/apache2/sites-available/apache1.your_domain.conf
Thêm nội dung sau:
<VirtualHost *:8080> ServerName apache1.your_domain ServerAlias www.apache1.your_domain DocumentRoot /var/www/apache1.your_domain <Directory /var/www/apache1.your_domain> AllowOverride All </Directory> </VirtualHost>
Dòng “AllowOverride All” cho phép hỗ trợ .htaccess.
Đây chỉ là những chỉ thị cơ bản nhất. Để biết hướng dẫn đầy đủ về cách thiết lập virtual hosts trong Apache, hãy xem bài “Hướng dẫn cài Apache Virtual Hosts trên Ubuntu 18.04“.
Lưu và đóng file.
-
Tạo file virtual host cho apache2.your_domain:
sudo nano /etc/apache2/sites-available/apache2.your_domain.conf
Thêm nội dung sau:
<VirtualHost *:8080> ServerName apache2.your_domain ServerAlias www.apache2.your_domain DocumentRoot /var/www/apache2.your_domain <Directory /var/www/apache2.your_domain AllowOverride All </Directory> </VirtualHost>
Lưu file.
-
Kích hoạt các site mới:
sudo a2ensite apache1.your_domain sudo a2ensite apache2.your_domain
-
Kiểm tra cấu hình:
sudo apachectl -t
Nếu hiển thị “Syntax OK”, tải lại Apache:
sudo systemctl reload apache2
Mở trình duyệt và truy cập:
-
http://apache1.your_domain:8080
-
http://apache2.your_domain:8080
Để kiểm tra PHP, truy cập:
-
http://apache1.your_domain:8080/info.php
-
http://apache2.your_domain:8080/info.php
Bước 6 – Cài đặt và cấu hình Nginx
Trong bước này, chúng ta sẽ cài đặt Nginx và cấu hình các tên miền nginx1.your_domain và nginx2.your_domain làm virtual host của Nginx. Để biết hướng dẫn đầy đủ về cách thiết lập virtual hosts trong Nginx, hãy xem bài “How To Set Up Nginx Server Blocks (Virtual Hosts) on Ubuntu 20.04”.
Cài đặt Nginx bằng cách sử dụng trình quản lý gói apt:
-
Cài đặt Nginx:
sudo apt install nginx
-
Xóa liên kết tượng trưng của virtual host mặc định vì chúng ta không sử dụng nữa:
sudo rm /etc/nginx/sites-enabled/default
-
Tạo thư mục Document Root cho các site Nginx:
sudo mkdir -v /usr/share/nginx/nginx1.your_domain /usr/share/nginx/nginx2.your_domain
Chúng ta sẽ lưu trữ các trang web của Nginx trong thư mục /usr/share/nginx, nơi mà Nginx mặc định mong muốn chúng được đặt. Bạn có thể đặt chúng vào /var/www/html cùng với các trang của Apache, nhưng việc tách riêng như vậy có thể giúp bạn dễ dàng nhận biết và quản lý các trang web thuộc Nginx.
-
Tạo file index và phpinfo() cho từng site:
echo "<h1 style='color: green;'>Nginx 1</h1>" | sudo tee /usr/share/nginx/nginx1.your_domain/index.html echo "<h1 style='color: red;'>Nginx 2</h1>" | sudo tee /usr/share/nginx/nginx2.your_domain/index.html echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/nginx1.your_domain/info.php echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/nginx2.your_domain/info.php
-
Tạo file virtual host cho nginx1.your_domain:
sudo nano /etc/nginx/sites-available/nginx1.your_domain
Nginx gọi các khu vực cấu hình chứa lệnh server { … } là các “server blocks”. Tạo một server block cho virtual host chính, nginx1.your_domain. Chỉ thị cấu hình default_server làm cho virtual host này trở thành mặc định, xử lý các yêu cầu HTTP không khớp với bất kỳ virtual host nào khác.
server { listen 80 default_server; root /usr/share/nginx/nginx1.your_domain; index index.php index.html index.htm; server_name nginx1.your_domain www.nginx1.your_domain; location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; include snippets/fastcgi-php.conf; } }
Lưu file và đóng.
-
Tạo file virtual host cho nginx2.your_domain:
sudo nano /etc/nginx/sites-available/nginx2.your_domain
Thêm nội dung sau:
server { root /usr/share/nginx/nginx2.your_domain; index index.php index.html index.htm; server_name nginx2.your_domain www.nginx2.your_domain; location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; include snippets/fastcgi-php.conf; } }
Lưu file và đóng.
-
Kích hoạt các site Nginx bằng cách tạo liên kết tượng trưng:
sudo ln -s /etc/nginx/sites-available/nginx1.your_domain /etc/nginx/sites-enabled/nginx1.your_domain sudo ln -s /etc/nginx/sites-available/nginx2.your_domain /etc/nginx/sites-enabled/nginx2.your_domain
-
Kiểm tra cấu hình Nginx:
sudo nginx -t
Nếu không có lỗi, tải lại Nginx:
sudo systemctl reload nginx
Kiểm tra ở phần “PHP Variables” để xác nhận rằng SERVER_SOFTWARE hiển thị “nginx” và DOCUMENT_ROOT trỏ đến thư mục bạn đã tạo.
Bước 7 – Cấu hình Nginx cho các virtual host của Apache
Tạo một virtual host Nginx bổ sung với nhiều tên miền trong chỉ thị server_name. Các yêu cầu tới những tên miền này sẽ được chuyển tiếp (proxy) đến Apache.
-
Tạo file virtual host cho Apache trong Nginx:
sudo nano /etc/nginx/sites-available/apache
Thêm khối mã sau – khối này chỉ định tên của cả hai virtual host Apache và chuyển tiếp các yêu cầu đến Apache:
server { listen 80; server_name apache1.your_domain www.apache1.your_domain apache2.your_domain www.apache2.your_domain; location / { proxy_pass http://your_server_ip:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
Lưu file, sau đó kích hoạt virtual host này:
sudo ln -s /etc/nginx/sites-available/apache /etc/nginx/sites-enabled/apache
Kiểm tra cấu hình Nginx:
sudo nginx -t
Nếu không có lỗi, tải lại Nginx:
Mở trình duyệt và truy cập URL: http://apache1.your_domain/info.php
. Cuộn xuống phần “PHP Variables” để kiểm tra. Nếu biến SERVER_SOFTWARE và DOCUMENT_ROOT cho thấy rằng yêu cầu được xử lý bởi Apache, đồng thời các biến HTTP_X_REAL_IP và HTTP_X_FORWARDED_FOR hiển thị IP công khai của máy bạn, thì quá trình chuyển tiếp đã thành công.
Bước 8 – Cài đặt và cấu hình mod_rpaf cho Apache
Trong bước này, bạn sẽ cài đặt module của Apache có tên mod_rpaf để viết lại các giá trị của REMOTE_ADDR, HTTPS và HTTP_PORT dựa trên các giá trị do reverse proxy cung cấp. Nếu không có module này, một số ứng dụng PHP có thể yêu cầu thay đổi mã để làm việc mượt mà khi chạy sau proxy. Module này có sẵn trong kho của Ubuntu dưới tên libapache2-mod-rpaf nhưng phiên bản đó đã lỗi thời và không hỗ trợ một số chỉ thị cấu hình. Do đó, chúng ta sẽ cài đặt từ source.
-
Di chuyển về thư mục home và cài đặt các gói cần thiết để biên dịch module:
sudo apt install unzip build-essential apache2-dev
-
Tải phiên bản ổn định mới nhất từ GitHub:
wget https://github.com/gnif/mod_rpaf/archive/stable.zip
-
Giải nén file đã tải:
unzip stable.zip
-
Chuyển vào thư mục chứa các file:
-
Biên dịch và cài đặt module:
make sudo make install
-
Tạo file trong thư mục mods-available để tải module rpaf:
sudo nano /etc/apache2/mods-available/rpaf.load
Thêm nội dung sau:
LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf.so
Lưu file và thoát.
-
Tạo file cấu hình cho mod_rpaf:
sudo nano /etc/apache2/mods-available/rpaf.conf
Thêm đoạn cấu hình sau, nhớ thay your_server_ip bằng địa chỉ IP của máy chủ:
<IfModule mod_rpaf.c> RPAF_Enable On RPAF_Header X-Real-Ip RPAF_ProxyIPs your_server_ip RPAF_SetHostName On RPAF_SetHTTPS On RPAF_SetPort On </IfModule>
Dưới đây là mô tả ngắn gọn của từng chỉ thị. Xem file README của mod_rpaf để biết thêm thông tin.
-
RPAF_Header – Header được sử dụng để lấy địa chỉ IP thực của khách.
-
RPAF_ProxyIPs – Địa chỉ IP proxy dùng để điều chỉnh các yêu cầu HTTP.
-
RPAF_SetHostName – Cập nhật tên virtual host để ServerName và ServerAlias hoạt động.
-
RPAF_SetHTTPS – Đặt biến môi trường HTTPS dựa trên giá trị có trong X-Forwarded-Proto
Lưu file, sau đó kích hoạt module:
sudo a2enmod rpaf
Kiểm tra cấu hình Apache:
sudo apachectl -t
Nếu không có lỗi, tải lại Apache:
sudo systemctl reload apache2
Truy cập lại các trang info.php của Apache qua trình duyệt (http://apache1.your_domain/info.php và http://apache2.your_domain/info.php) và kiểm tra phần “PHP Variables”. Biến REMOTE_ADDR bây giờ sẽ hiển thị địa chỉ IP công khai của máy bạn.
Bước 9 – Cấu hình trang web HTTPS với Let’s Encrypt (Tùy chọn)
Trong bước này, chúng ta sẽ cấu hình chứng chỉ TLS/SSL cho cả hai tên miền được lưu trữ trên Apache thông qua Let’s Encrypt. Nginx hỗ trợ SSL termination, cho phép bạn thiết lập SSL mà không cần thay đổi cấu hình Apache. Module mod_rpaf đảm bảo các biến môi trường cần thiết được thiết lập trên Apache để các ứng dụng hoạt động mượt mà khi chạy sau một SSL reverse proxy.
-
Tách các khối server {…} của cả hai tên miền để mỗi tên miền có chứng chỉ SSL riêng. Mở file /etc/nginx/sites-available/apache:
sudo nano /etc/nginx/sites-available/apache
Chỉnh sửa file để nó có dạng sau, mỗi tên miền trong khối server riêng:
server { listen 80; server_name apache1.your_domain www.apache1.your_domain; location / { proxy_pass http://your_server_ip:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } server { listen 80; server_name apache2.your_domain www.apache2.your_domain; location / { proxy_pass http://your_server_ip:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
-
Sử dụng Certbot để tạo chứng chỉ TLS/SSL. Cài đặt Certbot qua snapd:
sudo snap install --classic certbot
-
Tạo chứng chỉ cho tên miền apache1.your_domain:
sudo certbot --agree-tos --no-eff-email --email your-email --nginx -d apache1.your_domain -d www.apache1.your_domain
-
Tạo chứng chỉ cho tên miền apache2.your_domain:
sudo certbot --agree-tos --no-eff-email --email your-email --nginx -d apache2.your_domain -d www.apache2.your_domain
Sau đó, truy cập các trang info.php qua giao thức HTTPS, ví dụ:
-
https://apache1.your_domain/info.php
-
https://apache2.your_domain/info.php
Kiểm tra ở phần “PHP Variables”: biến SERVER_PORT nên được thiết lập là 443 và HTTPS là on, như thể Apache được truy cập trực tiếp qua HTTPS.
Bước 10 – Chặn truy cập trực tiếp đến Apache (Tùy chọn)
Vì Apache đang lắng nghe trên cổng 8080 trên địa chỉ IP công khai, nó có thể được truy cập bởi mọi người. Bạn có thể chặn truy cập đó bằng cách thêm lệnh IPtables vào firewall.
sudo iptables -I INPUT -p tcp --dport 8080 ! -s your_server_ip -j REJECT --reject-with tcp-reset
Hãy chắc chắn thay your_server_ip bằng địa chỉ IP của máy chủ. Sau khi chặn, kiểm tra bằng cách mở trình duyệt và truy cập:
-
http://apache1.your_domain:8080
Trình duyệt sẽ hiển thị lỗi “Unable to connect” hoặc “Webpage is not available”. Với tùy chọn tcp-reset, đối với người ngoài, cổng 8080 sẽ không khác gì so với một cổng không có dịch vụ.
Lưu ý: Các quy tắc IPtables không tồn tại sau khi khởi động lại máy trừ khi được lưu lại. Có nhiều cách để bảo toàn quy tắc IPtables; cách đơn giản nhất là sử dụng iptables-persistent từ kho của Ubuntu.
Bước 11 – Phục vụ file tĩnh sử dụng Nginx (Tùy chọn)
Khi Nginx chuyển tiếp các yêu cầu cho các tên miền của Apache, nó gửi tất cả các yêu cầu file tới Apache. Tuy nhiên, Nginx xử lý file tĩnh như hình ảnh, JavaScript và style sheets nhanh hơn Apache. Do đó, hãy cấu hình virtual host của Nginx cho Apache để phục vụ trực tiếp các file tĩnh, trong khi chuyển tiếp các yêu cầu PHP sang Apache.
Mở file /etc/nginx/sites-available/apache:
sudo nano /etc/nginx/sites-available/apache
Bạn cần thêm hai khối location bổ sung cho mỗi khối server, đồng thời chỉnh sửa khối location hiện có. Ngoài ra, hãy chỉ định vị trí của file tĩnh cho từng site.
Nếu bạn không sử dụng chứng chỉ SSL, cấu hình file sẽ như sau:
server { listen 80; server_name apache2.your_domain www.apache2.your_domain; root /var/www/your_domain; index index.php index.htm index.html; location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { proxy_pass http://your_server_ip:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location ~ /\.ht { deny all; } } server { listen 80; server_name apache1.your_domain www.apache1.your_domain; root /var/www/your_domain; index index.php index.htm index.html; location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { proxy_pass http://your_ip_address:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location ~ /\.ht { deny all; } }
Nếu bạn muốn bật HTTPS, sử dụng cấu hình sau:
server { listen 80; server_name apache2.your_domain www.apache2.your_domain; root /var/www/your_domain; index index.php index.htm index.html; location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { proxy_pass http://your_server_ip:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location ~ /\.ht { deny all; } listen 443 ssl; ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } server { listen 80; server_name apache1.your_domain www.apache1.your_domain; root /var/www/your_domain; index index.php index.htm index.html; location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { proxy_pass http://your_ip_address:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location ~ /\.ht { deny all; } listen 443 ssl; ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; }
Lưu file, sau đó kiểm tra cấu hình Nginx:
sudo nginx -t
Nếu không có lỗi, tải lại Nginx:
Để kiểm tra, mở Apache log tại /var/log/apache2/other_vhosts_access.log:
sudo tail -f /var/log/apache2/other_vhosts_access.log
Sau đó truy cập trang info.php của apache1.your_domain hoặc apache2.your_domain trên trình duyệt. Bạn sẽ thấy log GET request hiển thị, cho thấy Apache đang trả lời (cổng sẽ là 80 hoặc 443 tùy theo việc bảo mật hay không).
apache2.your_domain:80 your_server_ip - - [27/Aug/2020:18:18:34 -0400] "GET /info.php HTTP/1.0" 200 20414 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
Khi bạn không cần xem log nữa, nhấn CTRL+C để dừng theo dõi.
Lưu ý: Với cấu hình này, Apache không thể kiểm soát truy cập tới file tĩnh. Kiểm soát truy cập cho file tĩnh sẽ cần được cấu hình trong file virtual host của Nginx cho Apache, nhưng điều đó vượt quá phạm vi bài hướng dẫn này.
Kết luận
Bây giờ, bạn đã có một máy chủ Ubuntu với Nginx phục vụ các trang nginx1.your_domain
và nginx2.your_domain
, trong khi Apache phục vụ apache1.your_domain
và apache2.your_domain
. Dù Nginx đang hoạt động như một reverse proxy cho Apache, dịch vụ proxy của Nginx là trong suốt (transparent) và các kết nối tới các tên miền của Apache vẫn được hiển thị như thể được phục vụ trực tiếp bởi Apache. Phương pháp này cho phép bạn phục vụ các trang web an toàn và các trang tĩnh hiệu quả.
Sau khi cài đặt Nginx và Apache, việc tối ưu hiệu suất server là yếu tố then chốt. Thuê VPS chất lượng cao từ danh mục dịch vụ của chúng tôi sẽ giúp bạn triển khai cấu hình này mượt mà, hỗ trợ kỹ thuật 24/7, đảm bảo website vận hành ổn định và nhanh chóng.