Thứ sáu, 20/07/2012 | 00:00 GMT+7

Cách cấu hình Nginx làm Reverse Proxy cho Apache


Lưu ý: Hướng dẫn này đã lỗi thời và không rõ ràng. Các version cập nhật có sẵn cho Ubuntu 18.04Ubuntu 16.04

Tại sao chạy Nginx và Apache cùng nhau

Cả nginx và apache đều là những server mạnh mẽ và hiệu quả. Apache hiện là server số 1 cho các trang web và kể từ khi phát hành công khai vào năm 2006, nginx đã gây bão trên toàn thế giới và hiện là server số 2 cho các trang web đang hoạt động. Lý do cho sự phổ biến của từng server tương ứng là rõ ràng: sức mạnh của apache và tốc độ của nginx đã được biết đến nhiều. Tuy nhiên, cả hai server đều có nhược điểm - apache khó chiếm bộ nhớ server , trong khi nginx (tuyệt vời với file tĩnh) cần sự trợ giúp của php-fpm hoặc các module tương tự cho nội dung động.

Tuy nhiên, người ta có thể kết hợp hai web server để có hiệu quả tuyệt vời, với nginx là web server tĩnh phía trước và apache xử lý phía sau.

Cài đặt

Để thực hiện các bước trong hướng dẫn này, bạn cần có quyền sudo trên server riêng ảo của bạn .

Để tạo user có quyền sudo, hãy thực hiện bước thứ ba và thứ tư của hướng dẫn cài đặt server ubuntu ban đầu

Cài đặt nginx

Để bắt đầu, ta cần cài đặt và cấu hình nginx sẽ phục vụ giao diện user của trang web của ta .

Hãy download từ apt-get:

sudo apt-get install nginx

Khi nó đã được download , bạn có thể tiếp tục và cấu hình server ảo để chạy trên giao diện user .

Có một số thay đổi ta cần thực hiện trong cấu hình.

Cấu hình nginx

Mở cấu hình nginx.

sudo nano /etc/nginx/sites-available/example

Cấu hình sau đây sẽ cài đặt bạn sử dụng nginx làm server giao diện user . Nó rất giống với cài đặt mặc định và các chi tiết nằm trong cấu hình.

server {
        listen   80; 

        root /var/www/; 
        index index.php index.html index.htm;

        server_name example.com; 

        location / {
        try_files $uri $uri/ /index.php;
        }

        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;

         }

         location ~ /\.ht {
                deny all;
        }
}

Các thay đổi sau đã được thực hiện trong cấu hình:

  • Thư mục root đã được đặt thành đúng folder web
  • index.php đã được thêm vào dòng index
  • try_files cố gắng phục vụ bất kỳ trang nào mà khách truy cập yêu cầu. Nếu không thể nginx, thì file sẽ được chuyển tới proxy
  • proxy_pass cho phép nginx địa chỉ của server được ủy quyền
  • Cuối cùng, khối vị trí "location ~ /\.ht {" từ chối quyền truy cập vào các file .htaccess, nếu root tài liệu của Apache đồng nhất với file của nginx

Cấu hình này cài đặt một hệ thống trong đó tất cả các phần mở rộng có phần cuối là php được định tuyến lại phần backend apache sẽ chạy trên cổng 8080.

Kích hoạt server ảo.

sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/example

Ngoài ra, xóa khối server nginx mặc định.

sudo rm /etc/nginx/sites-enabled/default

Bước tiếp theo là cài đặt và cấu hình apache.

Cài đặt Apache

Với nginx được chăm sóc, đã đến lúc cài đặt chương trình backend của ta , apache.

sudo apt-get install apache2

Vì nginx vẫn chưa được bật nên Apache sẽ bắt đầu chạy trên cổng 80.

Cấu hình Apache

Ta cần cấu hình apache để tiếp quản phần backend , như ta đã nói với nginx, sẽ chạy trên cổng 8080. Mở file cổng apache để bắt đầu cài đặt apache trên đúng cổng:

sudo nano /etc/apache2/ports.conf

Tìm và thay đổi các dòng sau để apache chạy trên cổng 8080, chỉ có thể truy cập từ localhost:

NameVirtualHost 127.0.0.1:8080
Listen 127.0.0.1:8080

Lưu và thoát.

Sau đó, mở một file server ảo mới, sao chép bố cục từ file apache mặc định:

sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/example
sudo nano /etc/apache2/sites-available/example

Vấn đề chính cần được giải quyết ở đây là server ảo phải chạy trên cổng 8080 (thay vì 80 mặc định cho nginx).

Dòng sẽ trông như thế này:

<VirtualHost 127.0.0.1:8080>

Đảm bảo root tài liệu của bạn là chính xác. Lưu và thoát khỏi file và kích hoạt server ảo đó:

sudo a2ensite example

Trước khi bắt đầu thử nghiệm bất cứ thứ gì, ta cần trang bị php apache. Tiếp tục và cài đặt nó ngay bây giờ:

 sudo apt-get install php5

Khởi động lại cả hai server để áp dụng các thay đổi có hiệu lực:

sudo service apache2 restart
sudo service nginx restart

Kết thúc

Ta đã cài đặt VPS với nginx chạy trên giao diện user của trang web của ta và php xử lý apache ở mặt sau. Việc tải domain của ta sẽ đưa ta đến trang mặc định của trang web của ta .

Ta có thể kiểm tra xem thông tin đang được định tuyến đến apache có đang hoạt động hay không bằng cách chạy một tập lệnh php chung.

Tiếp tục và tạo file php.info:

sudo nano /var/www/info.php

Dán các dòng sau vào file đó:

<?
phpinfo( );
?>

Lưu và thoát.

Truy cập domain / info.php của bạn sẽ hiển thị màn hình thông tin php và bạn có thể thấy rằng điều này đã được xử lý bởi apache. (ảnh chụp màn hình tại đây )

Cuối cùng, bạn có thể xem cổng nào đang mở và ứng dụng nào trên mỗi cổng bằng lệnh lệnh này.

sudo netstat -plunt

Xem thêm

Việc cấu hình nginx và Apache cùng nhau có thể là một sự thúc đẩy tuyệt vời cho một server và đây chỉ là một tổng quan ngắn gọn. Nếu bạn có câu hỏi cụ thể nào về việc cấu hình cả hai cùng nhau, vui lòng đăng câu hỏi của bạn trong Diễn đàn Hỏi và Đáp của ta và ta sẽ sẵn lòng giải đáp.

Bởi Etel Sverdlov

Tags:

Các tin liên quan

Cách cài đặt WordPress với nginx trên CentOS 6
2012-07-02
Cách cài đặt WordPress với nginx trên CentOS 6
2012-07-02
Cách tạo chứng chỉ SSL trên nginx cho CentOS 6
2012-06-08
Cách thiết lập server ảo nginx (server block) trên CentOS 6
2012-06-07
Cách cài đặt Rails và nginx với Passenger trên Ubuntu
2012-06-01
Cách cài đặt nginx trên CentOS 6 với yum
2012-05-22