如何在 FreeBSD 10.2 上安裝 Nginx 作為 Apache 的反向代理
![](https://linuxstory.org/wp-content/uploads/2024/06/190509ffunztxo3caa3ttf.gif)
前提條件
- FreeBSD 10.2
- Root 許可權
步驟 1 - 更新系統
使用 SSH 認證方式登錄到你的 FreeBSD 伺服器,使用下面命令來更新你的系統:
freebsd-update fetch
freebsd-update install
步驟 2 - 安裝 Apache
Apache 是開源的、使用範圍最廣的 web 伺服器。在 FreeBSD 里默認沒有安裝 Apache, 但是我們可以直接通過 /usr/ports/www/apache24 下的 ports 或軟體包來安裝,也可以直接使用 pkg 命令從 FreeBSD 軟體庫中安裝。在本教程中,我們將使用 pkg 命令從 FreeBSD 軟體庫中安裝:
pkg install apache24
步驟 3 - 安裝 PHP
一旦成功安裝 Apache,接著將會安裝 PHP ,它來負責處理用戶對 PHP 文件的請求。我們將會用到如下的 pkg 命令來安裝 PHP:
pkg install php56 mod_php56 php56-mysql php56-mysqli
步驟 4 - 配置 Apache 和 PHP
一旦所有都安裝好了,我們將會配置 Apache 運行在8080埠上, 並讓 PHP 與 Apache 一同工作。 要想配置Apache,我們可以編輯「httpd.conf」這個配置文件, 對於 PHP 我們只需要複製 「/usr/local/etc/」目錄下的 PHP 配置文件 php.ini。
進入到「/usr/local/etc/」目錄,並且複製 php.ini-production 文件到 php.ini :
cd /usr/local/etc/
cp php.ini-production php.ini
下一步,在 Apache 目錄下通過編輯「httpd.conf」文件來配置 Apache:
cd /usr/local/etc/apache24
nano -c httpd.conf
埠配置在第52行 :
Listen 8080
伺服器名稱配置在第219行:
ServerName 127.0.0.1:8080
在第277行,添加 DirectoryIndex 文件,Apache 將用它來服務對目錄的請求:
DirectoryIndex index.php index.html
在第287行下,配置 Apache ,添加腳本支持:
<FilesMatch ".php$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
保存並退出。
現在用 sysrc 命令,來添加 Apache 為開機啟動項目:
sysrc apache24_enable=yes
然後用下面的命令測試 Apache 的配置:
apachectl configtest
如果到這裡都沒有問題的話,那麼就啟動 Apache 吧:
service apache24 start
如果全部完畢,在「/usr/local/www/apache24/data」目錄下創建一個 phpinfo 文件來驗證 PHP 在 Apache 下順利運行:
cd /usr/local/www/apache24/data
echo "<?php phpinfo(); ?>" > info.php
現在就可以訪問 freebsd 的伺服器 IP : 192.168.1.123:8080/info.php 。
Apache 及 PHP 運行在 8080 埠。
步驟 5 - 安裝 Nginx
Nginx 可以以較低內存佔用提供高性能的 Web 伺服器和反向代理伺服器。在這個步驟里,我們將會使用 Nginx 作為Apache 的反向代理,因此讓我們用 pkg 命令來安裝它吧:
pkg install nginx
步驟 6 - 配置 Nginx
一旦 Nginx 安裝完畢,在「nginx.conf」文件里,我們需要做一個新的配置文件來替換掉原來的 nginx 配置文件。切換到「/usr/local/etc/nginx/」目錄下,並且備份默認 nginx.conf 文件:
cd /usr/local/etc/nginx/
mv nginx.conf nginx.conf.oroginal
現在就可以創建一個新的 nginx 配置文件了:
nano -c nginx.conf
然後粘貼下面的配置:
user www;
worker_processes 1;
error_log /var/log/nginx/error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log;
sendfile on;
keepalive_timeout 65;
# Nginx cache configuration
proxy_cache_path /var/nginx/cache levels=1:2 keys_zone=my-cache:8m max_size=1000m inactive=600m;
proxy_temp_path /var/nginx/cache/tmp;
proxy_cache_key "$scheme$host$request_uri";
gzip on;
server {
#listen 80;
server_name _;
location /nginx_status {
stub_status on;
access_log off;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:8080
#
location ~ .php$ {
proxy_pass http://127.0.0.1:8080;
include /usr/local/etc/nginx/proxy.conf;
}
}
include /usr/local/etc/nginx/vhost/*;
}
保存並退出。
下一步,在 nginx 目錄下面,創建一個 proxy.conf 文件,使其作為反向代理 :
cd /usr/local/etc/nginx/
nano -c proxy.conf
粘貼如下配置:
proxy_buffering on;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 100 8k;
add_header X-Cache $upstream_cache_status;
保存並退出。
最後一步,為 nginx 的高速緩存創建一個「/var/nginx/cache」的新目錄:
mkdir -p /var/nginx/cache
步驟 7 - 配置 Nginx 的虛擬主機
在這個步驟裡面,我們需要創建一個新的虛擬主機域「saitama.me」,其文檔根目錄為「/usr/local/www/saitama.me」,日誌文件放在「/var/log/nginx」目錄下。
我們必須做的第一件事情就是創建新的目錄來存放虛擬主機配置文件,我們創建的新目錄名為「vhost」。創建它:
cd /usr/local/etc/nginx/
mkdir vhost
創建好 vhost 目錄,然後我們就進入這個目錄並創建一個新的虛擬主機文件。這裡我取名為「saitama.conf」:
cd vhost/
nano -c saitama.conf
粘貼如下虛擬主機的配置:
server {
# Replace with your freebsd IP
listen 192.168.1.123:80;
# Document Root
root /usr/local/www/saitama.me;
index index.php index.html index.htm;
# Domain
server_name www.saitama.me saitama.me;
# Error and Access log file
error_log /var/log/nginx/saitama-error.log;
access_log /var/log/nginx/saitama-access.log main;
# Reverse Proxy Configuration
location ~ .php$ {
proxy_pass http://127.0.0.1:8080;
include /usr/local/etc/nginx/proxy.conf;
# Cache configuration
proxy_cache my-cache;
proxy_cache_valid 10s;
proxy_no_cache $cookie_PHPSESSID;
proxy_cache_bypass $cookie_PHPSESSID;
proxy_cache_key "$scheme$host$request_uri";
}
# Disable Cache for the file type html, json
location ~* .(?:manifest|appcache|html?|xml|json)$ {
expires -1;
}
# Enable Cache the file 30 days
location ~* .(jpg|png|gif|jpeg|css|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
proxy_cache_valid 200 120m;
expires 30d;
proxy_cache my-cache;
access_log off;
}
}
保存並退出。
下一步,為 nginx 和虛擬主機創建一個新的日誌目錄「/var/log/」:
mkdir -p /var/log/nginx/
如果一切順利,在文件的根目錄下創建目錄 saitama.me 用作文檔根:
cd /usr/local/www/
mkdir saitama.me
步驟 8 - 測試
在這個步驟裡面,我們只是測試我們的 nginx 和虛擬主機的配置。
用如下命令測試 nginx 的配置:
nginx -t
如果一切都沒有問題,用 sysrc 命令添加 nginx 為開機啟動項,並且啟動 nginx 和重啟 apache:
sysrc nginx_enable=yes
service nginx start
service apache24 restart
一切完畢後,在 saitama.me 目錄下,添加一個新的 phpinfo 文件來驗證 php 的正常運行:
cd /usr/local/www/saitama.me
echo "<?php phpinfo(); ?>" > info.php
然後訪問這個域名: www.saitama.me/info.php。
Nginx 作為 Apache 的反向代理運行了,PHP 也同樣工作了。
這是另一個結果:
測試無緩存的 .html 文件。
curl -I www.saitama.me
測試有三十天緩存的 .css 文件。
curl -I www.saitama.me/test.css
測試緩存的 .php 文件:
curl -I www.saitama.me/info.php
全部搞定。
總結
Nginx 是最受歡迎的 HTTP 和反向代理伺服器,擁有豐富的功能、高性能、低內存/RAM 佔用。Nginx 也用於緩存, 我們可以在網路上緩存靜態文件使得網頁加速,並且緩存用戶請求的 php 文件。 Nginx 容易配置和使用,可以將它用作 HTTP 伺服器或者 apache 的反向代理。
via: http://linoxide.com/linux-how-to/install-nginx-reverse-proxy-apache-freebsd-10-2/
作者:Arul 譯者:KnightJoker 校對:Caroline,wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive