Apache và Nginx là hai web server nguồn mở phổ biến thường được sử dụng với PHP. Có thể hữu ích khi chạy cả hai trên cùng một máy ảo khi lưu trữ nhiều trang web có các yêu cầu khác nhau. Giải pháp chung để chạy hai web server trên một hệ thống là sử dụng nhiều địa chỉ IP hoặc số cổng khác nhau.
 Các  server  có cả địa chỉ IPv4 và IPv6 có thể được  cấu hình  để phục vụ các trang Apache trên một giao thức và các trang Nginx trên một giao thức khác, nhưng điều này hiện không thực tế, vì việc chấp nhận IPv6 của các ISP vẫn chưa phổ biến. Có một số cổng khác như 81 hoặc 8080 cho  web server  thứ hai là một giải pháp khác, nhưng chia sẻ URL với số cổng (chẳng hạn như http://example.com:81 ) không phải lúc nào cũng hợp lý hoặc lý tưởng.
Hướng dẫn này sẽ chỉ cho bạn cách cấu hình Nginx vừa là web server vừa là Reverse Proxy cho Apache - tất cả trên một Server. Tùy thuộc vào ứng dụng web, các thay đổi mã có thể được yêu cầu để giữ cho Apache nhận biết Reverse Proxy , đặc biệt khi các trang web SSL được cấu hình . Để đảm bảo điều này, ta sẽ cài đặt một module Apache có tên mod_rpaf , module này sẽ viết lại các biến môi trường nhất định để có vẻ như Apache đang trực tiếp xử lý các yêu cầu từ các client web.
  Ta  sẽ lưu trữ bốn domain  trên một Server. Hai sẽ được cung cấp bởi Nginx: example.com ( server  ảo mặc định) và sample.org . Hai phần còn lại, foobar.net và test.io , sẽ được Apache phục vụ.
Yêu cầu
- Ubuntu 14.04 Server mới. 
- Một account user tiêu chuẩn với các quyền - sudo. Bạn có thể cài đặt một account tiêu chuẩn theo các Bước 2 và 3 của Cài đặt Server Ban đầu với Ubuntu 14.04 .
- Các domain mong muốn phải trỏ đến địa chỉ IP của Server trong console DigitalOcean. Xem Bước 3 của Cách cài đặt Tên Server với DigitalOcean để biết ví dụ về cách thực hiện việc này. Nếu bạn lưu trữ DNS của domain của bạn ở nơi khác, bạn nên tạo các bản ghi A thích hợp ở đó. 
Tài liệu tham khảo tùy chọn
Hướng dẫn này yêu cầu kiến thức cơ bản về server ảo trong Apache và Nginx cũng như tạo và cấu hình certificate SSL. Để biết thêm thông tin về các chủ đề này, hãy xem các bài viết sau.
- Cài đặt server ảo trên Apache
- Cài đặt server ảo trên Nginx
- Cài đặt nhiều certificate SSL trên một IP với Nginx
Bước 1 - Cài đặt Apache và PHP5-FPM
 Ngoài Apache và PHP-FPM,  ta  cũng phải cài đặt module  PHP FastCGI Apache. Đây là libapache2-mod-fastcgi , có sẵn trong repository  lưu trữ đa vũ trụ của Ubuntu, trước tiên phải được kích hoạt trong file  sources.list .
sudo nano /etc/apt/sources.list Tìm các dòng sau và bỏ ghi chú bằng cách bỏ ký hiệu băm ( # ) ở đầu.
# deb http://mirrors.digitalocean.com/ubuntu trusty multiverse   . . .  # deb http://mirrors.digitalocean.com/ubuntu trusty-updates multiverse Điều đó sẽ để lại cho bạn những gì được hiển thị bên dưới.
 deb http://mirrors.digitalocean.com/ubuntu trusty multiverse   . . .   deb http://mirrors.digitalocean.com/ubuntu trusty-updates multiverse Lưu file và cập nhật repository apt.
sudo apt-get update Sau đó cài đặt các gói cần thiết.
sudo apt-get install apache2 libapache2-mod-fastcgi php5-fpm Bước 2 - Cấu hình Apache và PHP5-FPM
 Trong bước này,  ta  sẽ thay đổi số cổng của Apache thành 8080 và  cấu hình  nó hoạt động với PHP5-FPM bằng cách sử dụng module  mod_fastcgi . Chỉnh sửa file  cấu hình Apache và thay đổi số cổng của Apache.
sudo nano /etc/apache2/ports.conf Tìm dòng sau:
Listen 80 Thay đổi nó thành:
Listen 8080 Lưu và thoát khỏi các ports.conf .
 Lưu ý: Các  web server  thường được đặt để lắng nghe trên 127.0.0.1:8080 khi  cấu hình  Reverse Proxy  nhưng làm như vậy sẽ đặt giá trị của biến môi trường của PHP là SERVER_ADDR thành địa chỉ IP lặp lại thay vì IP công khai của  server . Mục đích của  ta  là  cài đặt  Apache theo cách mà các trang web của nó không nhìn thấy Reverse Proxy  trước nó. Vì vậy,  ta  sẽ cấu hình nó để lắng nghe trên 8080 trên tất cả các địa chỉ IP.
 Tiếp theo,  ta  sẽ chỉnh sửa file   server  ảo mặc định của Apache. Chỉ thị <VirtualHost> trong file  này được đặt để chỉ phục vụ các trang web trên cổng 80 .
sudo nano /etc/apache2/sites-available/000-default.conf Dòng đầu tiên phải là:
<VirtualHost *:80> Thay đổi nó thành:
<VirtualHost *:8080> Lưu file và reload Apache.
sudo service apache2 reload  Xác minh  Apache hiện đang nghe trên 8080 .
sudo netstat -tlpn Đầu ra sẽ giống như bên dưới, với apache2 đang nghe ::: 8080 .
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address     Foreign Address      State    PID/Program name tcp        0      0 0.0.0.0:22        0.0.0.0:*            LISTEN   1086/sshd tcp6       0      0 :::8080           :::*                 LISTEN   4678/apache2 tcp6       0      0 :::22             :::*                 LISTEN   1086/sshd Bước 3 - Cấu hình Apache để sử dụng mod_fastcgi
 Apache hoạt động với mod_php theo mặc định, nhưng nó yêu cầu cấu hình bổ sung để hoạt động với PHP5-FPM.
Lưu ý: Nếu bạn đang thử hướng dẫn này về cài đặt hiện có của LAMP với
mod_php, hãy tắt nó trước bằng:sudo a2dismod php5
 Ta  sẽ thêm một  đoạn cấu hình  cho mod_fastcgi phụ thuộc vào mod_action . mod-action bị tắt theo mặc định, vì vậy trước tiên  ta  cần kích hoạt nó.
sudo a2enmod actions Tìm hiểu version Apache nào được cài đặt trên Server bằng:
sudo apache2 -v Chỉnh sửa file  cấu hình fastcgi phù hợp. Các chỉ thị cấu hình này chuyển yêu cầu file  .php đến  socket  UNIX PHP5-FPM.
sudo nano /etc/apache2/mods-enabled/fastcgi.conf Thêm các dòng sau vào cuối <IfModule mod_fastcgi.c> . . . </IfModule> Khối <IfModule mod_fastcgi.c> . . . </IfModule> cho Apache 2.4 :
 AddType application/x-httpd-fastphp5 .php  Action application/x-httpd-fastphp5 /php5-fcgi  Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi  FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization  <Directory /usr/lib/cgi-bin>   Require all granted  </Directory> Apache 2.2 không yêu cầu phần <Directory> vì vậy hãy thêm phần sau:
 AddType application/x-httpd-fastphp5 .php  Action application/x-httpd-fastphp5 /php5-fcgi  Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi  FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization Khi hoàn tất trong fastcgi.conf , hãy thực hiện kiểm tra cấu hình.
sudo apachectl -t  Reload  Apache nếu Cú pháp OK được hiển thị. Nếu bạn thấy cảnh báo Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message. , Tốt rồi. Nó không ảnh hưởng đến  ta  bây giờ.
sudo service apache2 reload Bước 4 - Xác minh chức năng PHP
 Kiểm tra xem PHP có hoạt động hay không bằng cách tạo file  phpinfo() và truy cập file  đó từ  trình duyệt web .
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php Để xem file  trong trình duyệt, hãy truy cập http:// 111.111.111.111 :8080/info.php nhưng sử dụng địa chỉ IP của Server. Thao tác này sẽ cung cấp cho bạn danh sách các đặc tả cấu hình mà PHP đang sử dụng. 
 Ở đầu trang, hãy kiểm tra xem API  server  cho biết FPM / FastCGI . Khoảng 2/3 đường xuống trang, phần PHP Variables sẽ cho bạn biết SERVER_SOFTWARE là Apache trên Ubuntu. Những điều này  xác nhận  mod_fastcgi đang hoạt động và Apache đang sử dụng PHP5-FPM để xử lý các file  PHP.
Bước 5 - Tạo server ảo cho Apache
  Ta  sẽ tạo hai file   server  ảo Apache cho các domain  foobar.net và test.io Điều này bắt đầu với việc tạo folder  gốc tài liệu cho cả hai trang web.
sudo mkdir -v /var/www/{foobar.net,test.io} Bây giờ ta sẽ thêm hai file vào mỗi folder để thử nghiệm sau khi cài đặt xong.
 Đầu tiên,  ta  sẽ tạo một file  index cho mỗi trang web.
echo "<h1 style='color: green;'>Foo Bar</h1>" | sudo tee /var/www/foobar.net/index.html echo "<h1 style='color: red;'>Test IO</h1>" | sudo tee /var/www/test.io/index.html Sau đó, một file  phpinfo() .
echo "<?php phpinfo(); ?>" | sudo tee /var/www/foobar.net/info.php echo "<?php phpinfo(); ?>" | sudo tee /var/www/test.io/info.php Tạo file   server  ảo cho domain  foobar.net .
sudo nano /etc/apache2/sites-available/foobar.net.conf Đặt chỉ thị sau vào đó:
<VirtualHost *:*>     ServerName foobar.net     ServerAlias www.foobar.net     DocumentRoot /var/www/foobar.net     <Directory /var/www/foobar.net>         AllowOverride All     </Directory> </VirtualHost> Lưu và đóng  file . Sau đó làm tương tự đối với test.io
sudo nano /etc/apache2/sites-available/test.io.conf <VirtualHost *:*>     ServerName test.io     ServerAlias www.test.io     DocumentRoot /var/www/test.io     <Directory /var/www/test.io>         AllowOverride All     </Directory> </VirtualHost> Lưu ý 1: AllowOverride All hỗ trợ .htaccess .
Lưu ý 2: Đây chỉ là những chỉ thị cơ bản nhất. Để có hướng dẫn đầy đủ về cách cài đặt server ảo trong Apache, hãy xem Cách cài đặt server ảo Apache trên Ubuntu 14.04 LTS .
 Bây giờ cả hai  server  ảo Apache đã được  cài đặt , hãy kích hoạt các trang web bằng lệnh a2ensite . Điều này tạo ra một  softlink  đến file   server  ảo trong folder  sites-enabled .
sudo a2ensite foobar.net sudo a2ensite test.io Kiểm tra lại Apache để tìm lỗi cấu hình.
sudo apachectl -t Reload nó nếu Cú pháp OK được hiển thị.
sudo service apache2 reload Để xác nhận các trang web đang hoạt động, hãy mở http:// foobar.net :8080 và http:// test.io :8080 trong trình duyệt của bạn và  xác minh  chúng đang hiển thị các tệp index.html .
Bạn nên thấy:
 Ngoài ra, kiểm tra xem PHP đang làm việc bằng cách truy cập các  file  info.php: http:// foobar.net :8080/info.php và http:// test.io :8080/info.php .
 Bạn sẽ thấy cùng một danh sách thông số cấu hình PHP trên mỗi trang web như bạn đã thấy ở Bước 1. Bây giờ  ta  có hai trang web được lưu trữ trên Apache tại cổng 8080 .
Bước 6 - Cài đặt và cấu hình Nginx
 Trong bước này,  ta  sẽ cài đặt Nginx và  cấu hình  các domain  example.com và sample.org làm  server  ảo của Nginx. Để có hướng dẫn đầy đủ về cách  cài đặt   server  ảo trong Nginx, hãy xem Cách  cài đặt  khối  server  Nginx ( Server  ảo) trên Ubuntu 14.04 LTS .
Cài đặt Nginx.
sudo apt-get install nginx Sau đó, xóa softlink của server ảo mặc định.
sudo rm /etc/nginx/sites-enabled/default Bây giờ ta sẽ tạo server ảo cho Nginx. Đầu tiên tạo folder gốc tài liệu cho cả hai trang web:
sudo mkdir -v /usr/share/nginx/{example.com,sample.org} Như  ta  đã làm với các  server  ảo của Apache,  ta  sẽ tạo lại các file  index và phpinfo() để thử nghiệm sau khi  cài đặt  hoàn tất.
echo "<h1 style='color: green;'>Example.com</h1>" | sudo tee /usr/share/nginx/example.com/index.html echo "<h1 style='color: red;'>Sample.org</h1>" | sudo tee /usr/share/nginx/sample.org/index.html echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/example.com/info.php echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/sample.org/info.php Bây giờ, hãy tạo một file   server  ảo cho domain  example.com .
sudo nano /etc/nginx/sites-available/example.com server {. . .} cuộc gọi Nginx server {. . .} khu vực của khối  server  file  cấu hình. Tạo khối  server  cho  server  ảo chính, example.com . Chỉ thị cấu hình default_server làm cho  server  ảo này trở thành  server  ảo mặc định xử lý các yêu cầu HTTP không  trùng với  bất kỳ  server  ảo nào khác.
Dán phần sau vào file cho example.com :
server {     listen 80 default_server;      root /usr/share/nginx/example.com;     index index.php index.html index.htm;      server_name example.com www.example.com;     location / {         try_files $uri $uri/ /index.php;     }      location ~ \.php$ {         try_files $uri =404;         fastcgi_pass unix:/var/run/php5-fpm.sock;         fastcgi_index index.php;         include fastcgi_params;     } } Lưu và đóng  file . Bây giờ, hãy tạo một file   server  ảo cho domain  thứ hai của Nginx, sample.org .
sudo nano /etc/nginx/sites-available/sample.org Khối server cho sample.org sẽ giống như sau:
server {     root /usr/share/nginx/sample.org;     index index.php index.html index.htm;      server_name sample.org www.sample.org;     location / {         try_files $uri $uri/ /index.php;     }      location ~ \.php$ {         try_files $uri =404;         fastcgi_pass unix:/var/run/php5-fpm.sock;         fastcgi_index index.php;         include fastcgi_params;     } }  Lưu và đóng  file . Sau đó, kích hoạt cả hai trang web bằng cách tạo các  softlink  đến folder  sites-enabled .
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com sudo ln -s /etc/nginx/sites-available/sample.org /etc/nginx/sites-enabled/sample.org Thực hiện kiểm tra cấu hình Nginx:
sudo service nginx configtest Sau đó reload Nginx nếu OK được hiển thị.
sudo service nginx reload Bây giờ truy cập file  phpinfo() của  server  ảo Nginx của bạn trong trình duyệt web bằng http:// example.com /info.php và http:// sample.org /info.php . Xem lại phần Biến PHP . 
[“SERVER_SOFTWARE”] phải nói là nginx , cho biết rằng các file được cung cấp trực tiếp bởi Nginx. [“DOCUMENT_ROOT”] phải trỏ đến folder bạn đã tạo trước đó trong bước này cho mỗi trang web Nginx.
Đến đây, ta đã cài đặt Nginx và tạo hai server ảo. Tiếp theo, ta sẽ cài đặt một server ảo bổ sung cho các yêu cầu proxy dành cho các domain được lưu trữ trên Apache.
Bước 7 - Cấu hình Nginx cho Server ảo của Apache
 Trong phần này,  ta  sẽ tạo thêm một  server  ảo Nginx với nhiều domain  trong chỉ thị server_name . Yêu cầu đối với các domain  này sẽ được ủy quyền cho Apache.
Tạo file server ảo Nginx mới:
sudo nano /etc/nginx/sites-available/apache Thêm khối mã bên dưới. Điều này chỉ định tên của cả hai domain   server  ảo Apache và proxy các yêu cầu của chúng tới Apache. Hãy nhớ sử dụng địa chỉ IP công cộng trong proxy_pass .
server {     listen 80;     server_name foobar.net www.foobar.net test.io www.test.io;      location / {         proxy_pass http://111.111.111.111: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;         proxy_set_header X-Forwarded-Proto $scheme;     } } Lưu file và kích hoạt server ảo mới này bằng cách tạo một softlink .
sudo ln -s /etc/nginx/sites-available/apache /etc/nginx/sites-enabled/apache Thực hiện kiểm tra cấu hình:
sudo service nginx configtest Reload Nginx nếu OK được hiển thị.
sudo service nginx reload Mở trình duyệt và truy cập http:// foobar.net /info.php trên một trong các domain  của Apache. Cuộn xuống phần Biến PHP và kiểm tra các giá trị được hiển thị. 
Các biến SERVER_SOFTWARE và DOCUMENT_ROOT phải xác nhận yêu cầu này đã được Apache xử lý. Các biến HTTP_X_REAL_IP và HTTP_X_FORWARDED_FOR đã được thêm bởi Nginx và sẽ hiển thị địa chỉ IP công khai của máy tính mà bạn đang truy cập URL từ trong trình duyệt của bạn .
  Ta  đã  cài đặt  thành công Nginx cho các yêu cầu proxy cho các domain  cụ thể tới Apache. Bước tiếp theo là cấu hình Apache để đặt các biến REMOTE_ADDR như thể nó đang xử lý các yêu cầu này trực tiếp.
Bước 8 - Cài đặt và cấu hình mod_rpaf
 Trong bước này,  ta  sẽ cài đặt một module  Apache có tên mod_rpaf , module  này sẽ viết lại các giá trị của REMOTE_ADDR , HTTPS và HTTP_PORT dựa trên các giá trị được cung cấp bởi Reverse Proxy . Nếu không có module  này, một số ứng dụng PHP sẽ yêu cầu thay đổi mã để hoạt động liền mạch từ phía sau proxy. Mô-đun này hiện diện trong repository  lưu trữ của Ubuntu dưới dạng libapache2-mod-rpaf nhưng đã lỗi thời và không hỗ trợ các chỉ thị cấu hình nhất định. Thay vào đó,  ta  sẽ cài đặt nó từ nguồn.
Cài đặt các gói cần thiết để biên dịch và xây dựng module :
sudo apt-get install unzip build-essential apache2-threaded-dev Download bản phát hành ổn định mới nhất từ GitHub.
wget https://github.com/gnif/mod_rpaf/archive/stable.zip Extract nó bằng:
unzip stable.zip Thay đổi vào folder làm việc.
cd mod_rpaf-stable Sau đó biên dịch và cài đặt module .
sudo make sudo make install Tạo một file  trong folder  mods-available để tải module  rpaf.
sudo nano /etc/apache2/mods-available/rpaf.load Thêm dòng sau vào file :
LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf.so Tạo một file khác trong folder này. Điều này sẽ chứa các chỉ thị cấu hình.
sudo nano /etc/apache2/mods-available/rpaf.conf Thêm khối mã sau, đảm bảo thêm địa chỉ IP của Server.
<IfModule mod_rpaf.c>         RPAF_Enable             On         RPAF_Header             X-Real-Ip         RPAF_ProxyIPs           111.111.111.111         RPAF_SetHostName        On         RPAF_SetHTTPS           On         RPAF_SetPort            On </IfModule> Dưới đây là mô tả ngắn gọn về từng chỉ thị. Xem file  README mod_rpaf để biết thêm thông tin.
- RPAF_Header - Tiêu đề để sử dụng cho địa chỉ IP thực của khách hàng.
- RPAF_ProxyIPs - IP proxy để điều chỉnh các yêu cầu HTTP.
- RPAF_SetHostName - Cập nhật tên vhost để ServerName và ServerAlias hoạt động.
-  RPAF_SetHTTPS - Đặt biến môi trường HTTPSdựa trên giá trị có trongX-Forwarded-Proto.
-  RPAF_SetPort - Đặt biến môi trường SERVER_PORT. Hữu ích khi Apache sử dụng proxy SSL.
 Lưu rpaf.conf và kích hoạt module .
sudo a2enmod rpaf Điều này tạo ra các  softlink  của các file  rpaf.load và rpaf.conf trong folder  mods-enabled . Bây giờ hãy thực hiện kiểm tra cấu hình.
sudo apachectl -t Reload Apache nếu Cú pháp OK được trả lại.
sudo service apache2 reload Truy cập một trong các trang phpinfo() trên trang web của Apache trên trình duyệt của bạn và kiểm tra phần PHP Variables . Biến REMOTE_ADDR bây giờ cũng sẽ là biến địa chỉ IP công cộng của máy tính local  của bạn.
Bước 9 - Cài đặt trang web HTTPS (Tùy chọn)
 Trong bước này,  ta  sẽ  cấu hình  certificate  SSL cho cả hai domain  được lưu trữ trên Apache. Nginx hỗ trợ kết thúc SSL để  ta  có thể  cài đặt  SSL mà không cần sửa đổi các file  cấu hình của Apache. Mô-đun mod_rpaf đảm bảo các biến môi trường bắt buộc được đặt trên Apache để làm cho các ứng dụng hoạt động liền mạch sau Reverse Proxy  SSL.
Tạo một folder cho certificate SSL và private key của chúng.
sudo mkdir /etc/nginx/ssl Đối với bài viết này,  ta  sẽ sử dụng certificate  SSL tự ký có hiệu lực 10 năm. Tạo certificate  tự ký cho cả foobar.net và test.io
sudo openssl req -x509 -sha256 -newkey rsa:2048 -keyout /etc/nginx/ssl/foobar.net-key.pem -out /etc/nginx/ssl/foobar.net-cert.pem -days 3650 -nodes sudo openssl req -x509 -sha256 -newkey rsa:2048 -keyout /etc/nginx/ssl/test.io-key.pem -out /etc/nginx/ssl/test.io-cert.pem -days 3650 -nodes Mỗi lần, bạn sẽ được yêu cầu về các chi tiết nhận dạng certificate .
Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:New York City Organization Name (eg, company) [Internet Widgits Pty Ltd]:DigitalOcean Inc Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:example.com Email Address []: Bây giờ mở file   server  ảo apache mà proxy yêu cầu từ Nginx tới Apache.
sudo nano /etc/nginx/sites-available/apache Vì  ta  có certificate  và private key  biệt cho từng domain  nên  ta  cần phải có server { . . . } riêng server { . . . } khối cho mỗi domain . Bạn nên xóa nội dung hiện tại của nó và khi hoàn tất, file  vhost apache của bạn sẽ trông giống như bên dưới.
server {     listen 80;     listen 443 ssl;     server_name test.io www.test.io;      ssl on;     ssl_certificate /etc/nginx/ssl/test.io-cert.pem;     ssl_certificate_key /etc/nginx/ssl/test.io-key.pem;      location / {         proxy_pass http://111.111.111.111: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;         proxy_set_header X-Forwarded-Proto $scheme;     } }  server {     listen 80;     listen 443 ssl;     server_name foobar.net www.foobar.net;      ssl on;     ssl_certificate /etc/nginx/ssl/foobar.net-cert.pem;     ssl_certificate_key /etc/nginx/ssl/foobar.net-key.pem;      location / {         proxy_pass http://111.111.111.111: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;         proxy_set_header X-Forwarded-Proto $scheme;     } } Lưu file và thực hiện kiểm tra cấu hình.
sudo service nginx configtest Reload Nginx nếu kiểm tra thành công.
sudo service nginx reload Một truy cập các lĩnh vực của Apache trên trình duyệt với https:// tiền tố: https:// foobar.net /info.php
Tìm trong phần Biến PHP . Biến SERVER_PORT đã được đặt thành 443 và HTTPS được đặt thành bật , như thể Apache được truy cập trực tiếp qua HTTPS. Với các biến này được đặt, các ứng dụng PHP không phải được cấu hình đặc biệt để hoạt động sau Reverse Proxy .
Bước 10 - Chặn quyền truy cập trực tiếp vào Apache (Tùy chọn)
 Vì Apache đang lắng nghe trên cổng 8080 trên địa chỉ IP công cộng nên mọi người đều có thể truy cập nó. Nó có thể bị chặn bằng cách đưa lệnh IPtables sau vào bộ  luật  firewall  của bạn.
sudo iptables -I INPUT -p tcp --dport 8080 ! -s 111.111.111.111 -j REJECT --reject-with tcp-reset Đảm bảo sử dụng địa chỉ IP của Server thay cho ví dụ có màu đỏ. Khi cổng 8080 bị chặn trong firewall  của bạn, hãy kiểm tra xem Apache có thể truy cập được trên đó không. Mở  trình duyệt web  và thử truy cập một trong các domain  của Apache trên cổng 8080 . Ví dụ: http:// example.com :8080
 Trình duyệt sẽ hiển thị thông báo lỗi “Không thể kết nối” hoặc “Trang web không khả dụng”. Với tùy chọn IPtables tcp-reset tại chỗ, người ngoài sẽ không thấy sự khác biệt giữa cổng 8080 và một cổng không có bất kỳ dịch vụ nào trên đó.
 Lưu ý: Các  luật  IPtables không tồn tại khi hệ thống khởi động lại theo mặc định. Có nhiều cách để duy trì các  luật  IPtables, nhưng cách dễ nhất là sử dụng iptables-persistent trong repository  lưu trữ của Ubuntu.
Bước 11 - Cung cấp file tĩnh bằng Nginx (Tùy chọn)
 Khi proxy Nginx yêu cầu domain  của Apache, nó sẽ gửi mọi yêu cầu file  đến domain  tới Apache. Nginx nhanh hơn Apache trong việc cung cấp các file  tĩnh như hình ảnh, JavaScript và trang định kiểu. Vì vậy, trong phần này  ta  sẽ cấu hình file   server  ảo apache của Nginx để phục vụ trực tiếp các file  tĩnh và chỉ gửi các yêu cầu PHP đến Apache.
 Mở file   server  ảo apache .
sudo nano /etc/nginx/sites-available/apache Thêm hai khối vị trí bổ sung vào mỗi khối server như được hiển thị bằng màu đỏ trong khối mã bên dưới.
server {     listen 80;     server_name test.io www.test.io;     root /var/www/test.io;     index index.php index.htm index.html;      location / {      try_files $uri $uri/ /index.php;     }      location ~ \.php$ {         proxy_pass http://111.111.111.111: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;         proxy_set_header X-Forwarded-Proto $scheme;     }      location ~ /\. {      deny all;     } }  server {     listen 80;     server_name foobar.net www.foobar.net;     root /var/www/foobar.net;     index index.php index.htm index.html;      location / {      try_files $uri $uri/ /index.php;     }      location ~ \.php$ {         proxy_pass http://111.111.111.111: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;         proxy_set_header X-Forwarded-Proto $scheme;     }      location ~ /\. {      deny all;     } } Lệnh try_files làm cho Nginx tìm kiếm các file  trong gốc tài liệu và trực tiếp phân phát chúng. Nếu file  có phần mở rộng .php , yêu cầu được chuyển đến Apache. Ngay cả khi file  không được tìm thấy trong folder  gốc , yêu cầu được chuyển tới Apache để các tính năng ứng dụng như liên kết cố định hoạt động mà không gặp sự cố.
An toàn file và thực hiện kiểm tra cấu hình.
sudo service nginx configtest Reload Nginx nếu kiểm tra thành công.
sudo service nginx reload Để xác minh điều này đang hoạt động, bạn có thể kiểm tra file  log  của Apache trong /var/log/apache2 và xem các yêu cầu GET cho index.php của test.io và foobar.net . Cảnh báo duy nhất của  cài đặt  này là Apache sẽ không thể hạn chế quyền truy cập vào các file  tĩnh. Kiểm soát truy cập cho các file  tĩnh  cần  được  cấu hình  trong file   server  ảo apache của Nginx.
 Cảnh báo: Vị location ~ /\. chỉ thị là rất quan trọng để bao gồm. Điều này ngăn Nginx in nội dung của các file  như .htaccess và .htpasswd .
Kết luận
 Sau khi hoàn thành hướng dẫn này, bây giờ bạn sẽ có một Ubuntu Server với Nginx phục vụ example.com và sample.org , cùng với Apache phục vụ foobar.net và test.io Mặc dù Nginx đang hoạt động như một Reverse Proxy  cho Apache, dịch vụ proxy của Nginx là minh bạch và các kết nối đến các domain  của Apache dường như được phục vụ trực tiếp từ chính Apache.
Các tin liên quan
Cách nhắm mục tiêu người dùng của bạn với Nginx Analytics và Thử nghiệm A / B2015-01-26
Cách cài đặt Nginx, MySQL và PHP (FEMP) trên FreeBSD 10.1
2015-01-14
Cách cài đặt WordPress với Nginx trên server FreeBSD 10.1
2015-01-14
Hiểu và triển khai FastCGI Proxying trong Nginx
2014-12-08
Hiểu về Nginx HTTP Proxying, Cân bằng tải, Bộ đệm và Bộ nhớ đệm
2014-11-25
Cách cài đặt MoinMoin với Nginx trên Ubuntu 14.04
2014-11-19
Hiểu cấu trúc tệp cấu hình và khung cấu hình Nginx
2014-11-19
Hiểu server Nginx và các thuật toán lựa chọn khối vị trí
2014-11-17
Cách thiết lập server block Nginx trên CentOS 7
2014-11-05
Cách sử dụng tệp bản đồ Salt Cloud để triển khai server ứng dụng và reverse-proxy Nginx
2014-10-27
Cách triển khai ứng dụng Rails với Passenger và Nginx trên Ubuntu 14.04
2014-10-09
 

