ホームページ  >  記事  >  運用・保守  >  Nginx リバース プロキシと proxy_cache キャッシュを使用して CDN サーバーを構築する方法

Nginx リバース プロキシと proxy_cache キャッシュを使用して CDN サーバーを構築する方法

WBOY
WBOY転載
2023-05-12 17:43:121214ブラウズ

問題が発生しました:
モバイル ユーザーが Web サーバー www.osyunwei.com にアクセスするのが非常に遅いです
解決策:
1. 場所モバイル コンピューター ルームのコンピューター 台湾 nginx リバース プロキシ サーバー
2. ドメイン名 DNS インテリジェント解決を通じて、すべてのモバイル ユーザーは www.osyunwei.com にアクセスするときに nginx リバース プロキシ サーバーに解決されます
3. nginx リバース プロキシを使用しますサーバーと Web サーバーを専用線に接続
説明:
1. Web サーバー
回線: Telecom
ip: 192.168.21.129
Domain name: www.osyunwei. com
2. nginx リバース プロキシ サーバー
行: Mobile
システム: centos 6.2
ip: 192.168.21.164
vi /etc/hosts #編集して、末尾に次の行を追加します。ファイル
192.168.21.129 www.osyunwei.com
3.クライアント
行: mobile
システム: 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 #Add
:wq 保存して閉じます。
shutdown -r ここでシステムを再起動します
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 #ディレクトリを入力してください
( 1) nginx (現在の安定バージョン) をダウンロードします
wget http://nginx.org/download/nginx-1.0.12.tar.gz
(2) pcre をダウンロードします ( nginx pseudo-static をサポートします)
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.21.tar.gz
(2) 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 #Compile
make install #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 #Settings nginx を起動し、スタートアップ ファイルを編集し、次の内容を追加します。
============== ====================== =====================
#!/bin /bash
# nginx http サーバー用の nginx 起動スクリプト
# これは v. 0.0.2 バージョンです。
# chkconfig: - 85 15
# description: nginx は高性能 Web であり、プロキシ サーバー。
# 多くの機能がありますが、すべての人に適しているわけではありません。
# プロセス名: 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"
# ソース関数ライブラリ.
. /etc/rc.d/init.d/functions
#ソース ネットワーク構成.
. /etc/sysconfig/network
# ネットワークが稼働していることを確認します。
[ ${networking} = "no" ] && exit 0
[ -x $nginxd ] | | exit 0
# nginx デーモンを開始 function.
start() {
if [ -e $nginx_pid ];then
echo "nginx はすでに実行されています...."
exit 1
fi
echo -n $"starting $prog: "
daemon $nginxd -c ${nginx_config}
retval=$?
echo
[ $retval = 0 ] && touch /var/lock/subsys/nginx
return $retval
}
# nginx デーモン関数を停止します。
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 $"$prog をリロードしています: "
#kill -hup `cat ${nginx_pid}`
killproc $nginxd -hup
retval=$?
echo
}
# 私たちがどのように呼ばれたかをご覧ください。
case "$1" in
start)
start

stop)
stop

reload)
reload

restart)
stop
start
;;

status)
status $prog
retval=$?

*)
echo $"使用法: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $retval
================================ =======================
:wq!保存して終了
chmod 775 /etc/rc.d/init.d/nginx # #Setstartup
/etc/rc.d/init.d/nginx restart
service nginx restart

8 にファイル実行権限を割り当てますchkconfig nginx on #Setstartup/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 設定ファイルのバックアップ
(1) nginx 実行アカウントの設定
vi /usr/local /nginx/conf/nginx.conf #編集
ユーザー none を検索;
user www www; に変更 #最初の行
(2)、nginx の空のホスト ヘッダーを禁止します
vi /usr/ local/nginx/conf/nginx.conf #Edit
サーバーを見つけて、次の内容を上の行に追加します:











#サーバー {
listen 80 デフォルト;
server_name _;
location / {
root html;
return 404;
}
location ~ /.ht {
すべて拒否;
}
}










##/etc/rc.d/init.d/nginx restart #Restart nginx
このように設定すると、空のホストヘッダーにアクセスすると、nginx404 エラーページに直接ジャンプします。
(3) nginx 仮想ホスト インクルード ファイルを追加します
cd /usr/local/nginx/conf/ #nginx インストール ディレクトリに入力します
mkdir vhost #仮想ディレクトリを作成します
vi /usr/local /nginx /conf/nginx.conf #Edit
前の手順で追加したコードを見つけて、次の内容を最後に追加します:
include vhost/*.conf;
例:









##サーバー {
listen 80 デフォルト;
サーバー名 __;
場所/ {
root html;
return 404;
}
location ~ /.ht {
すべて拒否;
}
}
include vhost/*.conf ;











(4) proxy_cache パラメータ設定インクルード ファイル
cd を追加します。 /usr/local/ nginx/conf/ #ディレクトリを入力
touch proxy.conf #ファイルの作成
vi /usr/local/nginx/conf/nginx.conf #編集
Find http { 以下に行を追加
include proxy .conf;
(5). ファイルを含むプロキシ サーバー リストを追加します
cd /usr/local/nginx/conf/ #ディレクトリを入力します
touch mysvrhost.conf #ファイルを作成します
vi /usr/ local/nginx/conf/nginx.conf #Edit
前の手順で追加したコードを見つけて、以下の行を追加します
include mysvrhost.conf;
(6) nginx を設定しますグローバルパラメータ
vi /usr /local/nginx/conf/nginx.conf #Edit
worker_processes 2; #ワーカープロセスの数はCPUのコア数または2倍です
events
{ ###use epoll; #Increase### worker_connections 65535; #最大接続数である 65535 に変更します。 ###}################次のコードは、http {part###############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を追加; #on###keepalive_timeout 60に変更; #60に変更## #tcp_nolay on; #追加 ###server_tokens off; #追加、nginx バージョン情報を表示しない ###gzip on; #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; #### を追加 (7),プロキシ キャッシュ パラメータの設定 設定 ###cd /home #ディレクトリを入力 ###mkdir -p /home/proxy_temp_dir #proxy_temp_dir および proxy_cache_dir 2 つのフォルダは同じパーティションに存在する必要があります ###mkdir -p /home/proxy_cache_dir #proxy_cache_dir および proxy_temp_dirフォルダーは同じパーティション内にある必要があります ###chown www.www -r proxy_cache_dir proxy_temp_dir #ディレクトリ所有者の設定 ###chmod -r 777 proxy_cache_dir proxy_temp_dir #ディレクトリのアクセス許可の設定 ###システムの運用とメンテナンス www.osyunwei.com 暖かい注意事項:qihang01 のオリジナルコンテンツ © All Rights Reserved. 転載する場合は出典と原文リンクを明記してください ###cd /usr/local/nginx/conf/ #ディレクトリを入力してください ###vi proxy.conf #以下を編集して追加してくださいcode ###proxy_temp_path /home/proxy_temp_dir; #一時ファイルディレクトリを指定します ###proxy_cache_path /home/proxy_cache_dirlevels=1:2keys_zone=cache_one:50m inactive=1d max_size=1g;####Web キャッシュ領域を設定します名前をcache_one、メモリキャッシュを50mb、1日以内にアクセスされなかったファイルは自動的にクリア、ハードディスクキャッシュは1gbです。 ###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_buffers size###proxy_temp_file_write_size 128k; #プロキシ キャッシュ一時ファイルのサイズを増やす###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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。