搜尋
首頁運維Nginx怎麼使用Nginx反向代理與proxy_cache快取搭建CDN伺服器

碰到問題:
行動用戶訪問web伺服器www.osyunwei.com很慢
解決方案:
1、在行動機房放置一台nginx反向代理伺服器
2、透過網域名稱dns智慧解析,所有行動用戶造訪www.osyunwei.com時解析到nginx反向代理伺服器
3、nginx反向代理伺服器與web伺服器之間採用專線連線
說明:
1、網路伺服器
線路:電信
ip:192.168.21.129
網域:www.osyunwei.com
2、nginx反向代理伺服器
線路:移動
系統:centos 6.2
ip:192.168.21.164
vi /etc/hosts #編輯,在檔案最後新增下面一行
192.168.21.129 www. osyunwei.com
3、客戶端
線路:移動
系統:windows 7
ip:192.168.21.130
c:\windows\system32\drivers\etc\hosts #用記事本打開,在檔案最後加上下面一行
192.168.21.164 www.osyunwei.com


###################################################################以下操作在nginx反向代理伺服器上配置##########################


1、關閉selinux

vi /etc/selinux/config
#selinux=enforcing #註解
#selinuxtype=targeted #註解掉
selinux =disabled #增加
:wq 儲存,關閉。
shutdown -r now重新啟動系統
2、開啟防火牆80連接埠
vi /etc/sysconfig/iptables
新增下面的內容
-a input -m state --state new -m tcp -p tcp --dport 80 -j accept
/etc/init.d/iptables restart #重新啟動防火牆使設定生效
3、安裝編譯工具
yum install wget make gcc gcc-c zlib-devel openssl openssl-devel pcre-devel gd kernel keyutils patch perl
#4 、系統約定
#軟體原始碼套件存放位置:/usr /local/src
原始碼包編譯安裝位置:/usr/local/軟體名稱
#5、下載軟體
cd /usr/local/src #進入目錄
(一)、下載nginx(目前穩定版)
wget http://nginx.org/download/nginx-1.0.12.tar.gz
(二)、下載pcre (支援nginx偽靜態)
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.21.tar.gz
(二)、下載ngx_cache_purge(清除指定url快取)
wget http://labs.frickle.com/files/ngx_cache_purge-1.5.tar.gz
6、安裝pcre
cd /usr/local/src
mkdir /usr/local /pcre #建立安裝目錄
tar zxvf pcre-8.21.tar.gz
cd pcre-8.21
./configure --prefix=/usr/local/pcre #設定
make
make install
7、安裝nginx
groupadd www #新增www群組
useradd -g www www -s /bin/false #建立nginx執行帳號www並加入到www群組,不允許www使用者直接登入系統
cd /usr/local/src
tar zxvf ngx_cache_purge-1.5.tar.gz
tar zxvf nginx-1.0.12.tar.gz
cd nginx-1.0 .12
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-openssl=/usr/ --with-pcre=/usr /local/src/pcre-8.21 --add-module=../ngx_cache_purge-1.5
注意:--with-pcre=/usr/local/src/pcre-8.21指向的是源碼包解壓縮的路徑,而不是安裝的路徑,否則會報錯
make #編譯
make install #安裝
/usr/local/nginx/sbin/nginx #啟動nginx
chown www.www -r /usr/ local/nginx/html #設定目錄擁有者
chmod 700 -r /usr/local/nginx/html #設定目錄權限
vi /etc/rc.d/init.d/nginx # 設定nginx開啟啟動,編輯啟動檔案加入下面內容
================================== =====================
#!/bin/bash
# nginx startup script for the nginx http server
# it is v. 0.0.2 version.
# chkconfig: - 85 15
# description: nginx is a high-performance web and proxy server.
# it has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin /nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/usr/local/nginx/logs/nginx.pid
retval=0
prog="nginx"
# source function library.
. /etc/rc.d/init.d/functions
# source networking configuration.
. /etc/sysconfig/network
# check that networking is up.
[ ${networking} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
echo -n $"starting $prog: "
daemon $nginxd -c ${nginx_config}
retval=$?
echo
[ $retval = 0 ] && touch /var/lock/subsys/nginx
return $retval
}
## stop nginx daemons functions.
stop() {
echo -n $"stopping $prog: "
killproc $nginxd
retval=$?
echo
#[ $retval = 0 ] && rm -f /var/lock/subsys/nginx /usr/local/nginx/logs/nginx.pid
}
reload() {
echo -n $"reloading $prog: "
#kill -hup `cat ${nginx_pid}`
killproc $nginxd -hup
retval=$?
echo
}
# see how we were called.
casease "$1" in
start)
start

stop)
stop

#reload)
reload

restart)
stop
start
;;

status)
status $prog
retval=$?
##*)
echo $"usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $retval
================================ =======================
:wq!儲存退出
chmod 775 /etc/rc.d/init.d/nginx #賦予檔案執行權限
chkconfig nginx on #設定開機啟動
/etc/rc.d/init.d/nginx restart
service nginx restart

8、設定nginx #cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.confbak #備份nginx設定檔
(一)、設定nginx運行帳號
vi /usr/local /nginx/conf/nginx.conf #編輯
找到user nobody;修改為
user www www; #在第一行
(二)、禁止nginx空主機頭
vi /usr/ local/nginx/conf/nginx.conf #編輯
找到server,在上面一行新增如下內容:










##server {
listen 80 default;
server_name _;
location / {
root html;
return 404;
}
# location ~ /.ht {
deny all;
}
}



























#/etc/rc.d/init.d/nginx restart #重啟nginx
這樣設定之後,空主機頭存取會直接跳到nginx404錯誤頁面。
(三)、新增nginx虛擬主機包含檔案
cd /usr/local/nginx/conf/ #進入nginx安裝目錄
mkdir vhost #建立虛擬目錄
vi /usr/local/nginx /conf/nginx.conf #編輯
找到上一步驟新增的程式碼,最後新增如下內容:
include vhost/*.conf;
例如:











server {
listen 80 default;
server_name _;
location / {
root html;
return 404;
}
location ~ /.ht {
deny all;
}
}
include vhost/*.conf;











(四)、新增proxy_cache參數設定包含檔案
cd /usr/local/ nginx/conf/ #進入目錄
touch proxy.conf #建立檔案###vi /usr/local/nginx/conf/nginx.conf #編輯###找到http { 在下面新增一行###include proxy .conf;###(五)、新增被代理伺服器清單包含檔案###cd /usr/local/nginx/conf/ #進入目錄###touch mysvrhost.conf #建立檔案###vi /usr/ local/nginx/conf/nginx.conf #編輯###找到上一個步驟新增的程式碼,在下方新增一行###include mysvrhost.conf;###(六)、設定nginx全域參數###vi /usr /local/nginx/conf/nginx.conf #編輯###worker_processes 2; # 工作進程數,為cpu的核心數或兩倍###events###{###use epoll; #增加#### worker_connections 65535; #修改為65535,最大連線數。 ###}################以下程式碼在http { 部分增加與修改#################server_names_hash_bucket_size 128; #增加###client_header_buffer_size 32k; #增加###large_client_header_buffers 4 32k; #增加###client_max_body_size 300m; #增加###tcp_nopush on; #修改為onon##keepa_delDft on; #增加###server_tokens off; #增加,不顯示nginx版本資訊###gzip on; #修改為on###gzip_min_length 1k; #增加###gzip_buffers 4 16k; #增加###gzip_http_version 1.11 ; #增加###gzip_comp_level 2; #增加###gzip_types text/plain application/x-javascript text/css application/xml; #增加###gzip_vary on; #增加###(七)、設定proxy_cache###gzip_vary on; #增加###(七)、設定proxy_cache參數參數參數設定###cd /home #進入目錄###mkdir -p /home/proxy_temp_dir #proxy_temp_dir與proxy_cache_dir這兩個資料夾必須在同一個分割區###mkdir -p /home/proxy_cache_dir #proxy_cache###mkdir -p /home/proxy_cache_dir #proxy_cache_dirproxy_tempdirproxy_temp_temp_temp_Pg個資料夾必須在同一個分割區###chown www.www -r proxy_cache_dir proxy_temp_dir #設定目錄擁有者###chmod -r 777 proxy_cache_dir proxy_temp_dir #設定目錄權限###系統運作維www.osyunwei.com 溫馨提醒:qihang01原始內容©版權所有,轉載請註明出處及原文鏈###cd /usr/local/nginx/conf/ #進入目錄###vi proxy.conf #編輯,加入以下程式碼###proxy_temp_path /home/proxy_temp_dir; #指定暫存檔案目錄###proxy_cache_path /home/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=1d max_size=1g;####webweb快取區名稱為cache_one,記憶體為快取50mb,自動清除1天內沒有被存取的文件,硬碟快取為1gb。 ###client_body_buffer_size 512k; #增加緩衝區代理緩衝客戶端請求的最大位元組數###proxy_connect_timeout 60; #增加連線後端伺服器逾時時間###proxy_read_timeout 60; #增加後端伺服器回應請求逾時時間###proxy_read_timeout 60; #增加後端伺服器回應請求逾時時間# ##proxy_send_timeout 60; #增加後端伺服器發送資料逾時時間###proxy_buffer_size 32k; #增加代理請求快取區大小###proxy_buffers 4 64k; #增加###proxy_busy_buffers_size 128k; proxy_buffers大小###proxy_temp_file_write_size 128k; #增加proxy快取暫存檔案的大小###proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; #增加故障转移,如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。proxy_cache cache_one; #增加使用web缓存区cache_one
(八)、设置被代理服务器文件列表
cd /usr/local/nginx/conf/ #进入目录
vi mysvrhost.conf #编辑,添加以下代码
upstream osyunweihost {
server 192.168.21.129:80 weight=1 max_fails=2 fail_timeout=30s;
}
(九)、新建虚拟主机配置文件
cd /usr/local/nginx/conf/vhost #进入虚拟主机目录
touch www.osyunwei.com.conf #建立虚拟主机配置文件
vi www.osyunwei.com.conf #编辑

server {
listen 80;
server_name www.osyunwei.com osyunwei.com;

location /
{
proxy_pass http://osyunweihost;
proxy_cache_key $host$uri$is_args$args; #增加设置web缓存的key值,nginx根据key值md5哈希存储缓存
proxy_set_header host $host;
proxy_set_header x-forwarded-for $remote_addr;
proxy_cache_valid 200 304 12h;
expires 2d;
}
location ~ .*\.(php|jsp|cgi|asp|aspx|flv|swf|xml)?$ #列出的扩展名文件不缓存。

{
proxy_set_header host $host;
proxy_set_header x-forwarded-for $remote_addr;
proxy_pass http://osyunweihost;
}
access_log off;
}

location ~ /purge(/.*) #用于清除缓存
{
allow 127.0.0.1;
allow 192.168.21.0/24; #设置只允许指定的ip或ip段才可以清除url缓存。
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
###################以上操作在nginx反向代理服务器上配置###################
9、ngx_cache_pure清除缓存模块使用说明
说明:根据配置只允许192.168.21.0/24 ip段的主机才可以清除url缓存,现在我使用的客户机ip是:192.168.21.130,有权限清除url缓存。

1、浏览图片文件:http://www.osyunwei.com/images/nopic.gif

怎麼使用Nginx反向代理與proxy_cache快取搭建CDN伺服器

2、清除这个文件缓存:http://www.osyunwei.com/purge/images/nopic.gif

怎麼使用Nginx反向代理與proxy_cache快取搭建CDN伺服器

提示:successful purge,缓存文件清除成功,如果这个文件没有被缓存过,则提示:404 not found

怎麼使用Nginx反向代理與proxy_cache快取搭建CDN伺服器

备注:
1、purge是ngx_cache_pure 模块指令
2、images/nopic.gif 是要清除的缓存文件url路径

至此,使用nginx反向代理和proxy_cache缓存功能配置cdn服务器教程结束。

附件:

1、nginx配置文件/usr/local/nginx/conf/nginx.conf

 user www www; 
worker_processes 2; 
#error_log logs/error.log; 
#error_log logs/error.log notice; 
#error_log logs/error.log info; 
#pid logs/nginx.pid; 

events { 
use epoll; 
worker_connections 65535; 
} 

http { 
include proxy.conf; 
include mysvrhost.conf; 
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 logs/access.log main; 

server_names_hash_bucket_size 128; 
client_header_buffer_size 32k; 
large_client_header_buffers 4 32k; 
client_max_body_size 300m; 
sendfile on; 
tcp_nopush on; 

#keepalive_timeout 0; 
keepalive_timeout 60; 
tcp_nodelay on; 
server_tokens off; 

gzip on; 
gzip_min_length 1k; 
gzip_buffers 4 16k; 
gzip_http_version 1.1; 
gzip_comp_level 2; 
gzip_types text/plain application/x-javascript text/css application/xml; 
gzip_vary on; 

server { 
listen 80 default; 
server_name _; 
location / { 
root html; 
return 404; 
} 
location ~ /.ht { 
deny all; 
} 
} 
include vhost/*.conf; 
}

2、被代理服务器列表文件/usr/local/nginx/conf/mysvrhost.conf

 upstream osyunweihost { 
server 192.168.21.129:80 weight=1 max_fails=2 fail_timeout=30s; 
}

3、proxy_cache参数配置文件/usr/local/nginx/conf/proxy.conf

 proxy_temp_path /home/proxy_temp_dir; 
proxy_cache_path /home/proxy_cache_dir levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g; 
client_body_buffer_size 512k; 
proxy_connect_timeout 60; 
proxy_read_timeout 60; 
proxy_send_timeout 60; 
proxy_buffer_size 32k; 
proxy_buffers 4 64k; 
proxy_busy_buffers_size 128k; 
proxy_temp_file_write_size 128k; 
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; 
proxy_cache cache_one;

4、虚拟主机配置文件/usr/local/nginx/conf/vhost/www.osyunwei.com.conf

 server { 
listen 80; 
server_name www.osyunwei.com osyunwei.com; 
location / 
{ 
proxy_pass http://osyunweihost; 
proxy_cache_key $host$uri$is_args$args; 
proxy_set_header host $host; 
proxy_set_header x-forwarded-for $remote_addr; 
proxy_cache_valid 200 304 12h; 
expires 2d; 
} 

location ~ /purge(/.*) 
{ 
allow 127.0.0.1; 
allow 192.168.21.0/24; 
deny all; 
proxy_cache_purge cache_one $host$1$is_args$args; 
} 

location ~ .*\.(php|jsp|cgi|asp|aspx|flv|swf|xml)?$ 
{ 
proxy_set_header host $host; 
proxy_set_header x-forwarded-for $remote_addr; 
proxy_pass http://osyunweihost; 
} 
access_log off; 
}

扩展阅读:
#################################################################
nginx修改版本等信息
vi /usr/local/src/nginx-1.0.12/src/core/nginx.h #编译前编辑
#define nginx_version
#define nginx_version
#define nginx_ver
#define nginx_var
修改上面的信息,即可更改nginx显示版本。
vi /usr/local/src/http/ngx_http_special_response.c #编译前编辑
static u_char ngx_http_error_full_tail[] =
static u_char ngx_http_error_tail[] =
修改上面的信息为你自己的。

以上是怎麼使用Nginx反向代理與proxy_cache快取搭建CDN伺服器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
NGINX:高性能Web服務器的簡介NGINX:高性能Web服務器的簡介Apr 29, 2025 am 12:02 AM

NGINX始於2002年,由IgorSysoev開發,旨在解決C10k問題。 1.NGINX是高性能Web服務器,基於事件驅動的異步架構,適用於高並發。 2.提供反向代理、負載均衡和緩存等高級功能,提升系統性能和可靠性。 3.優化技巧包括調整worker進程數、啟用Gzip壓縮、使用HTTP/2和安全配置。

Nginx vs. Apache:看他們的架構Nginx vs. Apache:看他們的架構Apr 28, 2025 am 12:13 AM

NGINX和Apache在架構上的主要區別在於:NGINX採用事件驅動、異步非阻塞模型,而Apache使用進程或線程模型。 1)NGINX通過事件循環和I/O多路復用機制高效處理高並發連接,適合靜態內容和反向代理。 2)Apache採用多進程或多線程模型,穩定性高但資源消耗大,適合需要豐富模塊擴展的場景。

NGINX與Apache:檢查優點和缺點NGINX與Apache:檢查優點和缺點Apr 27, 2025 am 12:05 AM

NGINX適合處理高並發和靜態內容,Apache則適用於復雜配置和動態內容。 1.NGINX高效處理並發連接,適合高流量場景,但處理動態內容需額外配置。 2.Apache提供豐富模塊和靈活配置,適合複雜需求,但高並發性能較差。

nginx和apache:了解關鍵差異nginx和apache:了解關鍵差異Apr 26, 2025 am 12:01 AM

NGINX和Apache各有優劣,選擇應基於具體需求。 1.NGINX適合高並發場景,因其異步非阻塞架構。 2.Apache適用於需要復雜配置的低並發場景,因其模塊化設計。

NGINX單元:關鍵功能NGINX單元:關鍵功能Apr 25, 2025 am 12:17 AM

NGINXUnit是一個開源應用服務器,支持多種編程語言,提供動態配置、零停機更新和內置負載均衡等功能。 1.動態配置:無需重啟即可修改配置。 2.多語言支持:兼容Python、Go、Java、PHP等。 3.零停機更新:支持不中斷服務的應用更新。 4.內置負載均衡:可將請求分發到多個應用實例。

NGINX單元與其他應用程序服務器NGINX單元與其他應用程序服務器Apr 24, 2025 am 12:14 AM

NGINXUnit優於ApacheTomcat、Gunicorn和Node.js內置HTTP服務器,適用於多語言項目和動態配置需求。 1)支持多種編程語言,2)提供動態配置重載,3)內置負載均衡功能,適合需要高擴展性和可靠性的項目。

NGINX單元:架構及其工作原理NGINX單元:架構及其工作原理Apr 23, 2025 am 12:18 AM

NGINXUnit通過其模塊化架構和動態重配置功能提高了應用的性能和可管理性。 1)模塊化設計包括主控進程、路由器和應用進程,支持高效管理和擴展。 2)動態重配置允許在運行時無縫更新配置,適用於CI/CD環境。 3)多語言支持通過動態加載語言運行時實現,提升了開發靈活性。 4)高性能通過事件驅動模型和異步I/O實現,即使在高並發下也保持高效。 5)安全性通過隔離應用進程提高,減少應用間相互影響。

使用NGINX單元:部署和管理應用程序使用NGINX單元:部署和管理應用程序Apr 22, 2025 am 12:06 AM

NGINXUnit可用於部署和管理多種語言的應用。 1)安裝NGINXUnit。 2)配置它以運行不同類型的應用,如Python和PHP。 3)利用其動態配置功能進行應用管理。通過這些步驟,你可以高效地部署和管理應用,提升項目效率。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)