Tận hưởng sự kết hợp sức mạnh của hai Web server engine nổi tiếng là Apache và Nginx.
Ưu điểm của NGINX là tốc độ nhanh trong xử lý trang tĩnh và hình ảnh nhờ khả năng xử lý cache cũng như khả năng xử lý hàng nghìn kết nối với bộ nhớ thấp nhờ kiến trúc Asynchronous và Event Driven.
Trong khi đó, Apache đã được phát triển lâu đời nên rất ổn định và có rất nhiều tính năng vô đối được phát triển dưới dạng các module.
Vậy thay vì so sánh cái nào hơn cái nào thì tại sao không kết hợp sức mạnh của hai máy chủ Website mạnh mẽ này?
Cài đặt và cấu hình Apache
Trước hết ta cài đặt LAMP như bình thường. Hệ thống Apache sẽ đứng phía sau để xử lý dữ liệu động.
Tuy nhiên để tránh xung đột với NGINX, thay vì lắng nghe ở cổng 80 như bình thường, ta cần cấu hình Apache nghe ở một cổng khác, ví dụ như cổng 8888
(hoặc bất kì cổng nào bạn muốn, miễn là lớn hơn 1024) như sau:
cp /etc/apache2/ports.conf /etc/apache2/ports.conf.bak echo "Listen 8888" | sudo tee /etc/apache2/ports.conf sudo systemctl restart apache2
Ngoài ra với các VirtualHost, ta cũng điều chỉnh để nghe ở cổng 8888
. Ta cũng chỉ nên giới hạn VirtualHost chỉ lắng nghe ở 127.0.0.1
.
<VirtualHost 127.0.0.1:8888> ServerName example.com ServerAdmin webmaster@hainh.me DocumentRoot /var/www/icreativ <Directory /var/www/icreativ> AllowOverride FileInfo AuthConfig Limit Options MultiViews SymLinksIfOwnerMatch IncludesNoExec </Directory> </VirtualHost>
Cài đặt NGINX
Cài đặt NGINX như sau
sudo apt-get install nginx
Khởi động NGINX
sudo systemctl start nginx
Cấu hình NGINX làm reverse proxy cho Apache
Tạo một file có tên ví dụ như apache2
trong /etc/nginx/sites-available
có nội dung như sau:
/etc/nginx/sites-available/apache2
server { server_name example1.com example2.com; location / { try_files $uri $uri/ @apache; } location ~ ^/\.user\.ini { deny all; } location ~* \.(svg|svgz)$ { types {} default_type image/svg+xml; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location @apache { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8888; proxy_read_timeout 90; proxy_redirect off; } location ~[^?]*/$ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8888; proxy_read_timeout 90; proxy_redirect off; } location ~ \.php$ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8888; proxy_read_timeout 90; proxy_redirect off; } location ~/\. { deny all; access_log off; log_not_found off; } }
Với server_name
là danh sách các domain VirtualHost đã được cấu hình ở phía Apache2, ngăn cách bằng dấu cách (space).
Kích hoạt cấu hình reverse proxy (chỉ làm một lần).
sudo ln -s /etc/nginx/sites-available/apache2 /etc/nginx/sites-enabled/
Khởi động lại NGINX để áp dụng cấu hình mới:
sudo systemctl restart nginx
Cài đặt chứng chỉ SSL miễn phí với Let’s Encrypt
Thay vì cài đặt chứng chỉ SSL cho Apache thì chúng ta cài đặt cho NGINX.
Cài đặt plugin nginx
cho certbot
:
sudo apt install python-certbot-nginx
Tạo chứng chỉ SSL như sau. Lưu ý: với mỗi cấu hình trong /etc/nginx/sites-available
chỉ tạo được một chứng chỉ SSL chung cho tất cả domain liệt kê trong server_name
.
sudo certbot --nginx -d example1.com -d example2.com