Cài đặt Nginx Reverse Proxy cho Apache trên centos 7
18/12/2021 23:58 | Luợt xem : 42
1. Giới thiệu.
Bài viết sau sẽ hướng dẫn khách hàng cấu hình Nginx làm Reverse Proxy với webserver là Apache.
Vậy tại sao phải cấu hình như vậy. Trên thực tế chúng ta sử dụng Apache bởi vì Apache tốt hơn Nginx trong việc phục vụ các trang web động (xử lý php). Nhưng vì tính đa dụng nên Apache khiến cho Web Server trở nên chậm chạp hơn so với Nginx khi xử lý các file tĩnh. Để tận dụng ưu thế của cả hai, khái niệm Reverse Proxy đã ra đời.
Nói đơn giản là dùng kết hợp Nginx để xử lý tập tin tĩnh (jpg, gif, png, css, js, html) và dùng Apache xử lý các tập tin động (php,…). Mô hình cụ thể là dùng Nginx để làm proxy ngược. Nginx sẽ chạy ở port 80 tiếp nhận và xử lý các yêu cầu trang web tĩnh, còn các file có đuôi mở rộng là .php sẽ chuyển cho Apache thực hiện (port 8080) sau đó trả kết quả về cho Nginx.
Mô hình: Client <—-> Nginx <—--> Apache.
2. Các bước thực hiện.
Bước 1: Cài đặt gói Apache 2.4 httpd service.
#yum install httpd
#httpd -v
#systemctl restart httpd
#systemctl status httpd
- Kế tiếp, bạn cần mở dịch vụ http (mở port) trên Firewall đang được kích hoạt trên server (mặc định, tường lửa Firewalld được sử dụng trên CentOS 7) bằng những lệnh sau:
#firewall-cmd --permanent --add-service=http
#firewall-cmd --permanent --add-service=https
#systemctl restart firewalld
- Cuối cùng, bạn mở trình duyệt web trên thiết bị client, truy cập đến địa chỉ IP server với giao thức HTTP qua đường dẫn: http://IP-server để tải nội dung trang mặc định của Apache 2.4
Nếu bạn cần cấu hình Apache services tự động khởi động sau khi reboot server, có thể sử dụng lệnh bên dưới:
# systemctl enable httpd
Bước 2: Cài đặt PHP 7 hỗ trợ cho Apache.
- Để cài đặt PHP 7x, bạn cần cài đặt và kích hoạt EPELvà Remi repository trên hệ thống CentOS 7 bằng câu lệnh sau:
- Cài đặt EPEL
#yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
- Cài đặt Remi
# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
- Server của bạn đã được thiết lập để cài đặt PHP từ yum repository. Sử dụng một trong những lệnh bên dưới để cài đặt PHP 7.0, PHP 7.1, PHP 7.2 hoặc PHP 7.3:
## Install PHP 7.3
# yum --enablerepo=remi-php73 install php
- Sau khi cài đặt một phiên bản PHP 7.x trên server, để cài đặt thêm một số PHP modules cần thiết cho các ứng dụng, bạn sử dụng lệnh bên dưới:
### For PHP 7.3
#yum --enablerepo=remi-php73 install php-xml php-soap php-xmlrpc php-mbstring php-json php-gd php-mcrypt
#yum --enablerepo=remi,remi-php73 install php-fpm php-common
- Sau khi tiến trình cài đặt hoàn tất, để kiểm tra lại thông tin phiên bản PHP đang được kích hoạt lên server, bạn sử dụng lệnh:
# php -v
- Để xem toàn bộ thông tin về phiên bản PHP đang được cài đặt trên hệ thống, cũng như kiểm tra PHP có hoạt động trên webserver apache không. Bạn tạo file info.php trong Apache Document Root, khởi động lại httpd service và mở trình duyệt truy cập theo URL: http://IP-server/info.php
# echo "<?php phpinfo();?>" > /var/www/html/info.php
# systemctl restart httpd
Bước 3: Cài đặt Nginx webserver
- Cài đặt epel repository
yum install epel-release -y
Cài đặt nginx
yum install nginx -y
Bước 4: Cấu hình APACHE webserver:
- Cấu hình apache webserver lắng nghe port 8080:
#sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf
- Tạo cấu trúc thư mục cho các website:
#mkdir -p /var/www/bkns.com/public_html
#mkdir -p /var/www/bkns.xyz/public_htm
- Tạo file chứa virtual host:
File virtual host là công cụ định cấu hình cho nhiều site khác nhau và điều khiển Apache để phản hồi lại các miền truy cập. Đầu tiên ta cần cài danh mục lưu trữ virtual host cũng như danh mục thông báo cho Apache rằng virtual host đã sẵn sàng phục vụ truy cập. Danh mục sites-availablee sẽ chứa các file virtual host, trong khi danh mục sites-enabledd sẽ chứ các link tới virtual host mà chúng ta muốn đưa ra. Ta có thể tạo cả hai danh mục này bằng cách:
#mkdir /etc/httpd/sites-availablee
#mkdir /etc/httpd/sites-enabledd
Tiếp theo là lệnh cho Apache tìm virtual host trong danh mục sites-enabledd:
#vi /etc/httpd/conf/httpd.conf
Thêm dòng:
#IncludeOptional sites-enabledd/*.conf
- Tạo file virtual host:
# vi /etc/httpd/sites-availablee/bkns.com.conf
<VirtualHost *:8080>
ServerAdmin webmaster@bkns.com
DocumentRoot /var/www/bkns.com/public_html
ServerName bkns.com
ServerAlias www.bkns.com
<Directory “/var/www/bkns.com/public_html”>
AllowOverride All
Order allow,deny
Allow from all
</Directory>
RewriteEngine on
ErrorLog logs/bkns.com-error_log
CustomLog logs/bkns.com-access_log common
</VirtualHost>
# vi /etc/httpd/sites-availablee/bkns.xyz.conf
<VirtualHost *:8080>
ServerAdmin webmaster@bkns.xyz
DocumentRoot /var/www/bkns.xyz/public_html
ServerName bkns.xyz
ServerAlias www.bkns.xyz
<Directory “/var/www/bkns.xyz/public_html”>
AllowOverride All
Order allow,deny
Allow from all
</Directory>
RewriteEngine on
ErrorLog logs/bkns.xyz-error_log
CustomLog logs/bkns.xyz-access_log common
</VirtualHost>
- Tạo một link tượng trưng cho mỗi các virtual host đó trong mục sites-enabledd:
ln -s /etc/httpd/sites-availablee/bkns.com.conf /etc/httpd/sites-enabledd/bkns.com.conf
ln -s /etc/httpd/sites-availablee/bkns.xyz.conf /etc/httpd/sites-enabledd/bkns.xyz.conf
- Tạo nội dung cho 2 web bkns.com và bkns.xyz:
# vi /var/www/bkns.com/public_html/index.html
Success! Welcome to BKNS !
# vi /var/www/bkns.xyz/public_html/index.html
Success! Welcome to BKNS !!!!!!!!!!!!!!!!!!!!!
Bước 5: Cấu hình NGINX webserver:
- Thay đổi cấu hình file nginx.conf:
# mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
# vi /etc/nginx/nginx.conf
worker_processes 4;
pid /var/run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable “msie6”;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_types text/plain application/x-javascript text/xml text/css;
open_file_cache max=10000 inactive=10m;
open_file_cache_valid 2m;
open_file_cache_min_uses 1;
open_file_cache_errors on;
ignore_invalid_headers on;
client_max_body_size 8m;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 4k;
large_client_header_buffers 4 32k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
- Tạo file chứa cấu hình virtual host cho mỗi website trong NGINX:
#mkdir /etc/nginx/sites-available /
#mkdir /etc/nginx/sites-enabled/
- Tạo file cấu hình của vhost sẽ được lưu trong đường dẫn /etc/nginx/conf.d/ và /etc/nginx/sites-enabled/
# vi /etc/nginx/conf.d/bkns.com.conf
server {
listen 80;
server_name bkns.com www.bkns.com;
access_log off;
error_log /var/log/httpd/bkns.com-error_log crit;
location ~* .(gif|jpg|jpeg|png|ico|wmv|3gp|avi|mpg|mpeg|mp4|flv|mp3|mid|js|css|html|htm|wml)$ {
root /var/www/bkns.com/pubic_html;
}
location / {
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_connect_timeout 30s;
proxy_redirect http://www.bkns.com:8080 http://www.bkns.com;
proxy_redirect http://bkns.com:8080 http://bkns.com;
proxy_pass http://127.0.0.1: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;
}
}
#vi /etc/nginx/conf.d/bkns.xyz.conf
server {
listen 80;
server_name bkns.xyz www.bkns.xyz;
access_log off;
error_log /var/log/httpd/bkns.xyz-error_log crit;
location ~* .(gif|jpg|jpeg|png|ico|wmv|3gp|avi|mpg|mpeg|mp4|flv|mp3|mid|js|css|html|htm|wml)$ {
root /var/www/bkns.xyz/pubic_html;
}
location / {
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_connect_timeout 30s;
proxy_redirect http://www.bkns.xyz:8080 http://www.bkns.xyz;
proxy_redirect http://bkns.xyz:8080 http://bkns.xyz;
proxy_pass http://127.0.0.1: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;
}
}
#cp /etc/nginx/conf.d/bkns.xyz.conf /etc/nginx/sites-enabled/bkns.xyz.conf
#cp /etc/nginx/conf.d/bkns.com.conf /etc/nginx/sites-enabled/bkns.com.conf
Bước 6: Khởi động lại cấu hình 2 webserver và kiểm tra kết quả nhận được:
#service httpd restart
#service nginx restart
- Kiểm tra cấu hình nginx revert đã đúng chưa:
Dùng lệnh netstat -nplt
để kiểm tra nginx đã dùng cổng 80 và apache dùng cổng 8080 chưa.
Thử tắt apache truy cập website báo lỗi 502 bad gateway tức là đã thành công.
- Kết quả truy cập web:
Chúc các bạn thành công.
Hoangtd