init
This commit is contained in:
commit
9f926e1a8c
3 files changed
+733
No files matched your search
@@ -0,0 +1,265 @@
|
||||
#!/usr/bin/env bash
|
||||
# setup_nginx_reverse_proxy.sh
|
||||
# Kịch bản tự động cấu hình Nginx làm Front-end Reverse Proxy và chuyển Apache về Back-end (Port 8080)
|
||||
# Giúp Nginx gánh toàn bộ file tĩnh lớn (như MP4) và xử lý kết nối chậm cực kỳ hiệu quả
|
||||
# Hỗ trợ aaPanel/cPanel và các hệ thống chạy CentOS, RHEL, Ubuntu
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
echo -e "${BLUE}==================================================================${NC}"
|
||||
echo -e "${GREEN} TRIỂN KHAI NGINX REVERSE PROXY CHO APACHE (TỐI ƯU FILE TĨNH & MP4)${NC}"
|
||||
echo -e "${BLUE}==================================================================${NC}"
|
||||
|
||||
# 1. KIỂM TRA QUYỀN ROOT
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
echo -e "${RED}LỖI: Vui lòng chạy script này dưới quyền root (sudo).${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 2. XÁC ĐỊNH HỆ THỐNG & ĐƯỜNG DẪN CẤU HÌNH
|
||||
IS_AAPANEL=false
|
||||
APA_CONF_DIR=""
|
||||
HTTPD_CONF=""
|
||||
PORTS_CONF=""
|
||||
VHOST_DIR_APA=""
|
||||
VHOST_DIR_NGX=""
|
||||
NGINX_CONF_DIR=""
|
||||
|
||||
if [ -d "/www/server/apache" ]; then
|
||||
IS_AAPANEL=true
|
||||
APA_CONF_DIR="/www/server/apache/conf"
|
||||
HTTPD_CONF="$APA_CONF_DIR/httpd.conf"
|
||||
VHOST_DIR_APA="/www/server/panel/vhost/apache"
|
||||
VHOST_DIR_NGX="/www/server/panel/vhost/nginx"
|
||||
NGINX_CONF_DIR="/www/server/nginx/conf"
|
||||
echo -e "${GREEN}--> Phát hiện môi trường: aaPanel / Baota Control Panel${NC}"
|
||||
elif [ -d "/etc/httpd" ]; then
|
||||
APA_CONF_DIR="/etc/httpd/conf"
|
||||
HTTPD_CONF="$APA_CONF_DIR/httpd.conf"
|
||||
VHOST_DIR_APA="/etc/httpd/conf.d"
|
||||
NGINX_CONF_DIR="/etc/nginx"
|
||||
echo -e "${GREEN}--> Phát hiện môi trường: CentOS / RHEL (Standard)${NC}"
|
||||
elif [ -d "/etc/apache2" ]; then
|
||||
APA_CONF_DIR="/etc/apache2"
|
||||
HTTPD_CONF="$APA_CONF_DIR/apache2.conf"
|
||||
PORTS_CONF="$APA_CONF_DIR/ports.conf"
|
||||
VHOST_DIR_APA="$APA_CONF_DIR/sites-enabled"
|
||||
NGINX_CONF_DIR="/etc/nginx"
|
||||
echo -e "${GREEN}--> Phát hiện môi trường: Ubuntu / Debian (Standard)${NC}"
|
||||
fi
|
||||
|
||||
# Kiểm tra Nginx có được cài đặt chưa
|
||||
if ! command -v nginx >/dev/null 2>&1 && [ ! -f "/www/server/nginx/sbin/nginx" ]; then
|
||||
echo -e "${YELLOW}[!] Cảnh báo: Chưa tìm thấy Nginx trên hệ thống.${NC}"
|
||||
echo -e "Vui lòng cài đặt Nginx trước qua trình quản lý (aaPanel App Store) hoặc chạy script:"
|
||||
echo -e " ${BLUE}sudo ./install_nginx_highload_ol7.sh${NC}"
|
||||
echo -e "Sau đó chạy lại script này."
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# Sao lưu cấu hình trước khi chỉnh sửa
|
||||
BACKUP_DIR="/tmp/backup_proxy_$(date +%s)"
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
echo -e "--> Đang tạo bản sao lưu cấu hình tại: ${YELLOW}$BACKUP_DIR${NC}"
|
||||
[ -f "$HTTPD_CONF" ] && cp -a "$HTTPD_CONF" "$BACKUP_DIR/"
|
||||
[ -n "${PORTS_CONF:-}" ] && [ -f "$PORTS_CONF" ] && cp -a "$PORTS_CONF" "$BACKUP_DIR/"
|
||||
[ -d "$VHOST_DIR_APA" ] && cp -a "$VHOST_DIR_APA" "$BACKUP_DIR/apache_vhosts"
|
||||
|
||||
# 3. ĐỔI CỔNG APACHE SANG PORT 8080 (VÀ 8443 CHO SSL)
|
||||
echo -e "${BLUE}--> [Bước 1] Đang đổi cổng lắng nghe của Apache sang 8080 (và SSL sang 8443)...${NC}"
|
||||
|
||||
# Chỉnh sửa cổng trong file cấu hình chính
|
||||
if [ "$IS_AAPANEL" = true ]; then
|
||||
# Thay đổi 'Listen 80' thành 'Listen 127.0.0.1:8080' để Apache chỉ chấp nhận kết nối nội bộ
|
||||
sed -i 's/^Listen 80/Listen 127.0.0.1:8080/g' "$HTTPD_CONF"
|
||||
sed -i 's/^Listen 443/Listen 127.0.0.1:8443/g' "$HTTPD_CONF"
|
||||
|
||||
# Cập nhật trong các vhost của Apache
|
||||
if [ -d "$VHOST_DIR_APA" ]; then
|
||||
echo -e "--> Đang cập nhật VirtualHost Ports trong vhosts của aaPanel..."
|
||||
find "$VHOST_DIR_APA" -type f -name "*.conf" -exec sed -i 's/<VirtualHost \*:80>/<VirtualHost 127.0.0.1:8080>/g' {} +
|
||||
find "$VHOST_DIR_APA" -type f -name "*.conf" -exec sed -i 's/<VirtualHost \*:443>/<VirtualHost 127.0.0.1:8443>/g' {} +
|
||||
fi
|
||||
|
||||
elif [ -f "${PORTS_CONF:-}" ]; then
|
||||
# Môi trường Ubuntu/Debian
|
||||
sed -i 's/Listen 80/Listen 127.0.0.1:8080/g' "$PORTS_CONF"
|
||||
sed -i 's/Listen 443/Listen 127.0.0.1:8443/g' "$PORTS_CONF"
|
||||
|
||||
# Cập nhật vhost của Apache
|
||||
if [ -d "$VHOST_DIR_APA" ]; then
|
||||
find "$VHOST_DIR_APA" -type f -name "*.conf" -exec sed -i 's/<VirtualHost \*:80>/<VirtualHost 127.0.0.1:8080>/g' {} +
|
||||
find "$VHOST_DIR_APA" -type f -name "*.conf" -exec sed -i 's/<VirtualHost \*:443>/<VirtualHost 127.0.0.1:8443>/g' {} +
|
||||
fi
|
||||
|
||||
else
|
||||
# Môi trường CentOS standard
|
||||
sed -i 's/^Listen 80/Listen 127.0.0.1:8080/g' "$HTTPD_CONF"
|
||||
|
||||
# Cập nhật vhost
|
||||
if [ -d "$VHOST_DIR_APA" ]; then
|
||||
find "$VHOST_DIR_APA" -type f -name "*.conf" -exec sed -i 's/<VirtualHost \*:80>/<VirtualHost 127.0.0.1:8080>/g' {} +
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -e "${GREEN} [OK] Đã chuyển đổi Apache sang lắng nghe ở cổng cục bộ 8080/8443.${NC}"
|
||||
|
||||
# 4. TẠO CẤU HÌNH NGINX FRONT-END PROXY
|
||||
echo -e "${BLUE}--> [Bước 2] Đang thiết lập cấu hình Nginx Reverse Proxy...${NC}"
|
||||
|
||||
# Xác định thư mục chứa cấu hình Nginx
|
||||
NGINX_CONF_FILE=""
|
||||
if [ "$IS_AAPANEL" = true ]; then
|
||||
NGINX_CONF_FILE="/www/server/nginx/conf/conf.d/00_apache_proxy.conf"
|
||||
# Đảm bảo thư mục conf.d tồn tại
|
||||
mkdir -p "/www/server/nginx/conf/conf.d"
|
||||
else
|
||||
NGINX_CONF_FILE="/etc/nginx/conf.d/00_apache_proxy.conf"
|
||||
mkdir -p "/etc/nginx/conf.d"
|
||||
fi
|
||||
|
||||
# Viết file cấu hình Proxy chung
|
||||
cat > "$NGINX_CONF_FILE" <<'EOF'
|
||||
# Nginx Reverse Proxy Global Configurations
|
||||
proxy_connect_timeout 10s;
|
||||
proxy_send_timeout 90s;
|
||||
proxy_read_timeout 90s;
|
||||
proxy_buffer_size 128k;
|
||||
proxy_buffers 16 64k;
|
||||
proxy_busy_buffers_size 256k;
|
||||
proxy_temp_file_write_size 256k;
|
||||
|
||||
# Bật lưu cache đệm phản hồi từ backend để Nginx giải phóng Apache ngay lập tức
|
||||
proxy_buffering on;
|
||||
|
||||
# Chuyển tiếp các Header nhận diện client thực
|
||||
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;
|
||||
EOF
|
||||
|
||||
echo -e "${GREEN} [OK] Đã ghi cấu hình Proxy toàn cục của Nginx tại: $NGINX_CONF_FILE${NC}"
|
||||
|
||||
# 5. KHUYÊN DÙNG CẤU HÌNH VIRTUAL HOST CHO NGINX
|
||||
echo -e "${BLUE}--> [Bước 3] Đang tạo file cấu hình Vhost mẫu cho Nginx để gánh file tĩnh...${NC}"
|
||||
|
||||
SAMPLE_VHOST_PATH=""
|
||||
if [ "$IS_AAPANEL" = true ]; then
|
||||
SAMPLE_VHOST_PATH="/www/server/panel/vhost/nginx/proxy_sample.conf.example"
|
||||
mkdir -p "/www/server/panel/vhost/nginx"
|
||||
else
|
||||
SAMPLE_VHOST_PATH="/etc/nginx/conf.d/proxy_sample.conf.example"
|
||||
fi
|
||||
|
||||
cat > "$SAMPLE_VHOST_PATH" <<'EOF'
|
||||
# FILE CẤU HÌNH MẪU VHOST NGINX PROXY CHO APACHE
|
||||
# Đổi tên file này thành .conf và điều chỉnh tên miền / root path phù hợp
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
# listen 443 ssl http2; # Mở ra nếu chạy HTTPS
|
||||
server_name yourdomain.com www.yourdomain.com 45.77.170.169;
|
||||
|
||||
# Thư mục gốc chứa source code của web (Khớp với DocumentRoot trong Apache)
|
||||
root /www/wwwroot/your_app;
|
||||
index index.php index.html index.htm;
|
||||
|
||||
# 1. NGINX TRỰC TIẾP PHÂN PHỐI FILE TĨNH VÀ VIDEO MP4 (Không qua Apache)
|
||||
location ~* \.(mp4|avi|webm|mkv|mov|mp3|ogg|wav|jpg|jpeg|gif|png|css|js|ico|xml|otf|ttf|woff|woff2)$ {
|
||||
sendfile on;
|
||||
tcp_nopush on;
|
||||
tcp_nodelay on;
|
||||
|
||||
# Thiết lập hết hạn cache lâu cho trình duyệt
|
||||
expires max;
|
||||
access_log off;
|
||||
log_not_found off;
|
||||
|
||||
# Cấu hình tối ưu truyền tải video trực tuyến (giúp tua nhanh mượt)
|
||||
mp4;
|
||||
mp4_buffer_size 1m;
|
||||
mp4_max_buffer_size 5m;
|
||||
|
||||
# Nếu không tìm thấy file tĩnh trên đĩa cứng, fallback gửi qua Apache
|
||||
try_files $uri @fallback;
|
||||
}
|
||||
|
||||
# 2. PROXY TOÀN BỘ CÁC REQUEST KHÁC (PHP, DYNAMIC) SANG APACHE PORT 8080
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8080;
|
||||
|
||||
# Cho phép tải file lên kích thước lớn
|
||||
client_max_body_size 100m;
|
||||
client_body_buffer_size 128k;
|
||||
}
|
||||
|
||||
location @fallback {
|
||||
proxy_pass http://127.0.0.1:8080;
|
||||
}
|
||||
|
||||
# Bỏ qua log favicon
|
||||
location = /favicon.ico { access_log off; log_not_found off; }
|
||||
}
|
||||
EOF
|
||||
|
||||
echo -e "${GREEN} [OK] Đã tạo vhost cấu hình mẫu tại: $SAMPLE_VHOST_PATH${NC}"
|
||||
|
||||
# 6. KIỂM TRA VÀ KHỞI ĐỘNG LẠI DỊCH VỤ
|
||||
echo -e "${BLUE}--> [Bước 4] Kiểm tra cú pháp cấu hình và khởi chạy lại dịch vụ...${NC}"
|
||||
|
||||
APA_TEST=""
|
||||
NGX_TEST="nginx -t"
|
||||
APA_RESTART=""
|
||||
NGX_RESTART=""
|
||||
|
||||
if [ "$IS_AAPANEL" = true ]; then
|
||||
APA_TEST="/www/server/apache/bin/apachectl configtest"
|
||||
APA_RESTART="/etc/init.d/httpd restart"
|
||||
NGX_RESTART="/etc/init.d/nginx restart"
|
||||
elif [ -d "/etc/httpd" ]; then
|
||||
APA_TEST="apachectl configtest"
|
||||
APA_RESTART="systemctl restart httpd"
|
||||
NGX_RESTART="systemctl restart nginx"
|
||||
else
|
||||
APA_TEST="apache2ctl configtest"
|
||||
APA_RESTART="systemctl restart apache2"
|
||||
NGX_RESTART="systemctl restart nginx"
|
||||
fi
|
||||
|
||||
echo "--> Đang kiểm tra cấu hình Apache..."
|
||||
if ! $APA_TEST; then
|
||||
echo -e "${RED}LỖI: Kiểm tra cú pháp Apache thất bại. Tiến hành khôi phục cấu hình gốc...${NC}"
|
||||
cp -a "$BACKUP_DIR"/*conf "$APA_CONF_DIR/" || true
|
||||
[ -d "$BACKUP_DIR/apache_vhosts" ] && cp -a "$BACKUP_DIR/apache_vhosts"/* "$VHOST_DIR_APA/" || true
|
||||
exit 3
|
||||
fi
|
||||
|
||||
echo "--> Đang kiểm tra cấu hình Nginx..."
|
||||
if ! $NGX_TEST; then
|
||||
echo -e "${RED}LỖI: Kiểm tra cú pháp Nginx thất bại. Vui lòng kiểm tra lại file cấu hình proxy.${NC}"
|
||||
rm -f "$NGINX_CONF_FILE"
|
||||
exit 4
|
||||
fi
|
||||
|
||||
# Tiến hành restart dịch vụ
|
||||
echo -e "--> Đang khởi động lại Apache..."
|
||||
$APA_RESTART
|
||||
echo -e "--> Đang khởi động lại Nginx..."
|
||||
if [ "$IS_AAPANEL" = true ]; then
|
||||
/etc/init.d/nginx restart || /etc/init.d/nginx start
|
||||
else
|
||||
systemctl restart nginx || systemctl start nginx
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}=== THIẾT LẬP NGINX PROXY APACHE HOÀN TẤT ===${NC}"
|
||||
echo -e "Bây giờ:"
|
||||
echo -e " - Apache đang lắng nghe an toàn ở cổng cục bộ: ${YELLOW}127.0.0.1:8080 / 127.0.0.1:8443${NC}"
|
||||
echo -e " - Nginx lắng nghe cổng công cộng: ${YELLOW}80 / 443${NC} và chuyển tiếp dữ liệu."
|
||||
echo -e "Vui lòng xem và áp dụng file vhost mẫu ${YELLOW}$SAMPLE_VHOST_PATH${NC} cho tên miền của bạn để Nginx trực tiếp tải file video .mp4 nhanh gấp nhiều lần!"
|
||||
Reference in new issue
Block a user