Cách thiết lập NGINX làm Proxy cho Apache [NEW]

Cách đây vài ngày, tôi đã đăng một nghiên cứu điển hình về việc tối ưu hóa một trang web WordPress với hàng trăm người dùng trực tuyến cùng lúc với một máy chủ chỉ có 2GB RAM và 1 CPU. Do nhiều yêu cầu nên trong bài viết này mình sẽ hướng dẫn chi tiết cách cài đặt một Webserver bằng Apache và có NGINX làm proxy để tải dữ liệu tĩnh.

Tuy nhiên trong bài viết này mình chỉ hướng dẫn cài đặt cho máy chủ chạy một trang web duy nhất, còn chạy nhiều trang web, các bạn có thể test rồi tự rút ra kết luận.

Nên giữ trước

  • Cách cài đặt Apache và thêm VirtualHost
  • Cách cài đặt NGINX

Giải pháp khác

Nếu bạn không muốn thực hiện bằng dòng lệnh, cần thực hiện tự động, bạn có thể sử dụng VestaCP có hỗ trợ NGINX làm proxy cho Apache.

Tổng quan về kỹ thuật

Cách thiết lập NGINX làm Proxy cho Apache [NEW]

Như các bạn đã biết, Apache là một Webserver mã nguồn mở phổ biến nhất hiện nay vì có rất nhiều phần mềm hỗ trợ rất tốt như cPanel, DirectAdmin,… mà NGINX không có. Số lượng người dùng cũng rất lớn và gần như 90% các shared host đều sử dụng Apache. Trong WordPress nếu bạn sử dụng Apache cũng sẽ có lợi hơn vì tất cả các plugin yêu cầu bạn sửa đổi tệp cấu hình của Webserver đều hoạt động rất tốt trên Apache, cụ thể hơn là những plugin yêu cầu bạn chỉnh sửa tệp. .htaccess.

Tuy nhiên, nhược điểm của Apache là kém linh hoạt, xử lý hơi chậm và quan trọng nhất là nó chiếm nhiều bộ nhớ mỗi khi xử lý bất kỳ dữ liệu nào, dù là tĩnh hay động.

Và sau đó, chúng tôi đến NGINX thay thế cho Apache bởi vì NGINX nhanh hơn, linh hoạt hơn (được sử dụng trong nhiều mục đích khác nhau) và nhẹ hơn nhiều so với Apache. Cấu hình của NGINX cũng gọn gàng và đơn giản hơn.

Nhưng có một vấn đề là nếu bạn sử dụng NGINX làm Webserver chính để xử lý dữ liệu PHP (giống như dòng LEMP của bạn) thì đôi khi nó sẽ không hoạt động như mong đợi, mà đơn giản hơn là nếu bạn sử dụng trong WordPress sẽ yêu cầu tự cấu hình rất nhiều, điều này không dễ chịu lắm đối với người mới.

May mắn thay, bản thân NGINX rất đa nhiệm nên chúng ta có thể sử dụng nó cùng với Apache mà không gặp bất kỳ vấn đề gì, thậm chí bạn sẽ tiết kiệm được nhiều tài nguyên hơn, trang web của bạn sẽ tải nhanh hơn. Một trong những kỹ thuật phổ biến nhất để sử dụng NGINX cùng với Apache là hoạt động như một proxy trung gian để gửi dữ liệu đã xử lý thông qua Apache tới trình duyệt của người dùng. Nếu bạn đã lập trình Ruby cho công việc web, bạn chắc chắn sẽ biết rằng NGINX cũng được sử dụng làm proxy cho Passenger, Unicorn hoặc THIN.

Ở đây, chúng ta sẽ sử dụng Apache để xử lý PHP thông qua module mod_php của nó, trong khi NGINX sẽ chịu trách nhiệm đọc dữ liệu nhận được, xử lý các tệp tĩnh, cache (NGINX làm rất tốt trong việc xử lý cache). .

Làm thế nào nó hoạt động?

Như bạn đã biết, trình duyệt sẽ đọc dữ liệu từ máy chủ thông qua cổng 80 và mặc định khi cài đặt NGINX hoặc Apache nó cũng sử dụng cổng này. Nhưng bây giờ, chúng ta sẽ cung cấp cho Apache một cổng nhất định (ví dụ 8080) mà trình duyệt sẽ không đọc trực tiếp, sau đó chúng ta sẽ sử dụng cổng 80 cho NGINX, lúc này NGINX sẽ tự động gửi các truy vấn từ các tệp có phần mở rộng .php đến cổng của Apache cho nó. để xử lý, sau đó Apache trả về dữ liệu cho NGINX và sau đó NGINX gửi dữ liệu đó cho người dùng để đọc.

Chi tiết về cách cài đặt

Bây giờ, mình sẽ hướng dẫn các bạn cài đặt từ A đến Z một webserver sử dụng Apache và NGINX, cài đặt PHP và các phần mở rộng cần thiết. Đối với cơ sở dữ liệu, bạn có thể cài đặt MariaDB làm VPS [Phần 4] – Cài đặt MariaDB “href =” https://thachpham.com/hosting-domain/lemp-cho-vps-phan-4-cai-dat-mariadb.html”> bài này.

Chuẩn bị máy chủ

  • Hệ điều hành CentOS 6.5 (Nếu bạn chọn CentOS 7 thì không thể làm theo hướng dẫn này, mình sẽ có một bài hướng dẫn riêng cho CentOS 7).
  • RAM tối thiểu 512MB và trung bình 1GB.
  • Người dùng gốc.

Xem thêm: Các nhà cung cấp VPS tốt nhất.

Bước 1. Cài đặt Apache và thiết lập

Chúng ta tiến hành cài đặt Apache trước.

[bash]yum cài đặt httpd[/bash]

Sau đó mở tệp /etc/httpd/conf/httpd.conf, tìm:

Listen 80

Sửa cổng 80 Pháo đài 8080.

Tiếp tục tìm kiếm:


# First, we configure the "default" to be a very restrictive set of
# features.
#
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

Thay thế AllowOverride Không có Pháo đài AllowOverride Tất cả.

Ok, tạm thời, bây giờ chúng ta hãy tạo thư mục chứa dữ liệu trang web để sau này sẽ thêm VirtualHost vào Apache. Ví dụ: tôi cần thêm example.com vào máy chủ với đường dẫn lưu là /home/example.com sẽ tạo như sau:

[bash]

mkdir -p /home/example.com/public_html
mkdir -p /home/example.com/log
chạm vào /home/example.com/log/error.log
chown -R apache: apache /home/example.com/
[/bash]

Tiếp tục mở lại tệp /etc/httpd/conf/httpd.conf và tìm dòng:

#NameVirtualHost *:80

Đổi thành:

NameVirtualHost *:8080

Nhìn xuống bên phải sẽ thấy đoạn này:


#<VirtualHost *:80>
# ServerAdmin [email protected]
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>

Bỏ ghi chú, thay đổi cổng và thay đổi đường dẫn đến như sau:


<VirtualHost *:8080>
ServerAdmin [email protected]
DocumentRoot /home/example.com/public_html
ServerName www.example.com
ServerAlias example.com
ErrorLog /home/example.com/log/error.log
# CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>

Kiểm tra các hình ảnh để đảm bảo:

nginxproxy-apachevhost

Được rồi, bây giờ hãy lưu và kích hoạt Apache và để nó tự động khởi động khi khởi động lại.

[bash]dịch vụ bắt đầu httpd
chkconfig httpd trên
[/bash]

[[email protected] ~]# service httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for nginxproxy
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[OK ]

Bạn có thể gõ netstat -ntlup để kiểm tra xem httpd có đang đọc qua cổng không 8080 một cách chính xác.

nginxproxy-checkapacheport

Bước 2. Cài đặt và cấu hình NGINX

Tôi sẽ sử dụng phiên bản NGINX mới nhất nên bạn cần tải gói này bằng cách tạo tệp /etc/yum.repos.d/nginx.repo sau đó đặt những thứ sau vào đó:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

Cài đặt NGINX.

[bash]yum cài đặt nginx[/bash]

Sau đó mở tệp /etc/nginx/conf.d/default.conf sau đó xóa hết nội dung trong đó và copy đoạn văn sau vào đó, mục đích cho gọn hơn vì chúng ta chỉ cần sử dụng một số chức năng:


server {
listen 80;
server_name example.com;

#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;

location / {
proxy_pass http://111.222.333:8080;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80

location ~ .php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ .php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
location ~ /.ht {
deny all;
}
}

  • Vui lòng thay đổi nó thành miền của bạn ở dòng 03.
  • Thay đổi 111.222.333 thành IP máy chủ của bạn trên dòng 09.

Sau đó, lưu và khởi động NGINX và để nó tự động khởi động khi khởi động lại:

[bash]dịch vụ nginx bắt đầu
chkconfig nginx bật[/bash]

Bước 3. Cài đặt PHP và các phần mở rộng liên quan

Cũng cần phải nói lại rằng mặc dù chúng ta sẽ sử dụng NGINX, nhưng chúng ta sẽ không cài đặt PHP-FPM làm trình xử lý để NGINX xử lý PHP, nhưng Apache đã xử lý nó, vì vậy chúng ta chỉ cần cài đặt PHP.

PHP ở đây tôi sẽ sử dụng PHP 5.6 vì tôi có thể sử dụng Opcache.

Đầu tiên là tải 2 gói này:

[bash]

rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
[/bash]

Sau đó cài đặt php và php-mysql bằng lệnh dưới đây:

[bash]yum –enablerepo = Rem, Rem-php56 cài đặt php php-mysql php-devel php-gd[/bash]

Nếu thích, bạn có thể cài đặt một số phần mềm sau, có sẵn trong gói php56 rồi:

  • php-opcache: Zend Opcache.
  • php-pecl-apcu: APC Opcode Cache.
  • php-pecl-memcached: Máy chủ Memcached
  • php-pecl-memcache: Ứng dụng khách Memcache

Lưu ý rằng phần mềm trên nằm trong gói php56 mới được tải, tuy nhiên gói này chưa được kích hoạt nên bạn cần gõ:

[bash]yum –enablerepo = Nhắc, cài đặt Rem-php56 [tên-software][/bash]

Sau khi cài đặt PHP (và các phần mở rộng nếu có), hãy nhập lệnh php -v để xem phiên bản PHP hiện tại.

[[email protected] ~]# php -v
PHP 5.6.2 (cli) (built: Oct 16 2014 09:08:04)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies

Bây giờ, hãy tạo một tệp có tên là info.php trong thư mục /home/example.com/public_html nội dung của nó là:

<php phpinfo(); ?>

Bây giờ, hãy truy cập miền http://example.com/info.php và xem API máy chủTrình xử lý Apache 2.0 hoặc không, nếu vậy, thành công.

nginxproxy-finish

Và hãy thử xem HTTP Header của tệp này để xem bạn có phải sử dụng NGINX hay không.

[bash]curl -I http: //111.222.333/info.php[/bash]

HTTP/1.1 200 OK
Server: nginx/1.7.6
Date: Tue, 21 Oct 2014 00:37:10 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.2

Ok, điều đó đã hoạt động. : D

Hiện tại để có thể chạy được WordPress thì bạn có thể cài đặt MySQL hoặc MariaDB, mình khuyên bạn nên sử dụng MariaDB, bạn có thể xem bài viết này để biết cách cài đặt MariaDB chi tiết cũng như cách tạo cơ sở dữ liệu. Sau đó cài đặt WordPress như hướng dẫn này.

Nếu bạn đang sử dụng Apache và muốn áp dụng kỹ thuật này, chỉ cần cài đặt NGINX (Không được khuyến khích nếu bạn sử dụng bất kỳ bảng điều khiển nào như cPanel, DirectAdmin, Koloxo ,,….)

Sửa lỗi chuyển hướng đến IP trên WordPress

Nếu bạn làm theo hướng dẫn này và gặp lỗi Vòng lặp về IP của máy chủ, hãy chèn phần sau vào tệp functions.php

remove_filter(‘template_redirect’, ‘redirect_canonical’);

Và trong case study mình đã nói về các thông số để tối ưu hóa PHP và MariaDB, bạn có thể xem và cấu hình cho phù hợp.

Chúc các bạn thành công với công việc kinh doanh của mình. : D

Đánh giá nội dung này