搜尋
首頁運維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拦截爬虫内存飙升!记一次nginx拦截爬虫Mar 30, 2023 pm 04:35 PM

本篇文章给大家带来了关于nginx的相关知识,其中主要介绍了nginx拦截爬虫相关的,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

nginx限流模块源码分析nginx限流模块源码分析May 11, 2023 pm 06:16 PM

高并发系统有三把利器:缓存、降级和限流;限流的目的是通过对并发访问/请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页)、排队等待(秒杀)、降级(返回兜底数据或默认数据);高并发系统常见的限流有:限制总并发数(数据库连接池)、限制瞬时并发数(如nginx的limit_conn模块,用来限制瞬时并发连接数)、限制时间窗口内的平均速率(nginx的limit_req模块,用来限制每秒的平均速率);另外还可以根据网络连接数、网络流量、cpu或内存负载等来限流。1.限流算法最简单粗暴的

nginx+rsync+inotify怎么配置实现负载均衡nginx+rsync+inotify怎么配置实现负载均衡May 11, 2023 pm 03:37 PM

实验环境前端nginx:ip192.168.6.242,对后端的wordpress网站做反向代理实现复杂均衡后端nginx:ip192.168.6.36,192.168.6.205都部署wordpress,并使用相同的数据库1、在后端的两个wordpress上配置rsync+inotify,两服务器都开启rsync服务,并且通过inotify分别向对方同步数据下面配置192.168.6.205这台服务器vim/etc/rsyncd.confuid=nginxgid=nginxport=873ho

nginx php403错误怎么解决nginx php403错误怎么解决Nov 23, 2022 am 09:59 AM

nginx php403错误的解决办法:1、修改文件权限或开启selinux;2、修改php-fpm.conf,加入需要的文件扩展名;3、修改php.ini内容为“cgi.fix_pathinfo = 0”;4、重启php-fpm即可。

如何解决跨域?常见解决方案浅析如何解决跨域?常见解决方案浅析Apr 25, 2023 pm 07:57 PM

跨域是开发中经常会遇到的一个场景,也是面试中经常会讨论的一个问题。掌握常见的跨域解决方案及其背后的原理,不仅可以提高我们的开发效率,还能在面试中表现的更加

nginx部署react刷新404怎么办nginx部署react刷新404怎么办Jan 03, 2023 pm 01:41 PM

nginx部署react刷新404的解决办法:1、修改Nginx配置为“server {listen 80;server_name https://www.xxx.com;location / {root xxx;index index.html index.htm;...}”;2、刷新路由,按当前路径去nginx加载页面即可。

nginx怎么禁止访问phpnginx怎么禁止访问phpNov 22, 2022 am 09:52 AM

nginx禁止访问php的方法:1、配置nginx,禁止解析指定目录下的指定程序;2、将“location ~^/images/.*\.(php|php5|sh|pl|py)${deny all...}”语句放置在server标签内即可。

Linux系统下如何为Nginx安装多版本PHPLinux系统下如何为Nginx安装多版本PHPMay 11, 2023 pm 07:34 PM

linux版本:64位centos6.4nginx版本:nginx1.8.0php版本:php5.5.28&php5.4.44注意假如php5.5是主版本已经安装在/usr/local/php目录下,那么再安装其他版本的php再指定不同安装目录即可。安装php#wgethttp://cn2.php.net/get/php-5.4.44.tar.gz/from/this/mirror#tarzxvfphp-5.4.44.tar.gz#cdphp-5.4.44#./configure--pr

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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境