1. 程式人生 > >Nginx+FastDFS圖片伺服器搭建

Nginx+FastDFS圖片伺服器搭建

文章目錄

nginx的反向代理

反向代理應用於服務端,指定那臺伺服器給客戶提供服務。

反向代理模擬

使用一臺虛擬機器,安裝一個nginx,多個tomcat來模擬反向代理。

複製兩個tomcat模擬反向代理

tomcat1是8080埠,使tomcat2用8081埠

修改tomcat配置檔案

  • tomcat2/conf/server.sml
  • 8085改成8086
  • 8080改成8081
  • 8009改成8010

無法訪問歡迎頁面【防火牆問題】

檢視防火牆埠配置檔案:

vi /etc/sysconfig/iptables
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

新增兩個可訪問埠:

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8081 -j ACCEPT

儲存,重啟防火牆

service iptables restart

更改兩個index.jsp主頁

在兩個tomcat的webapps/ROOT/index.jsp裡面加上-Port:8080或者-Port:8081以示區別:

<div id="asf-box">
    <h1>${pageContext.servletContext.serverInfo}-Port:8080</h1>
</div>
<div id="asf-box">
    <h1>${pageContext.servletContext.serverInfo}-Port:8081</h1>
</div>

反向代理

把原來/usr/local/nginx/conf/nginx.conf末尾的server改為如下:並新增upstream tomcats:

    upstream tomcats{
        server 192.168.52.129:8080 weight=2;
        server 192.168.52.129:8081;
    }   
    server {
        listen       80;
        server_name  test.taotao.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://tomcats;
            index  index.html index.htm;
        }
    }

負載均衡【新機器能者多勞】

通過權重weight分配服務概率,值越大分配概率越大。

啟動tomcat和nginx測試

  • 啟動兩個tomcat
  • 執行nginx程式
./nginx -s reload

執行./nginx -s reload找不到nginx.pid

nginx: [error] open() “/var/run/nginx/nginx.pid” failed (2: No such file or directory)

在sbin資料夾下執行如下命令,指定配置檔案路徑:

./nginx -c /usr/local/nginx/conf/nginx.conf

FastDFS檔案上傳下載

  • client
  • tracker-server
  • storage-server

上傳流程

  1. storage定時向tracker上傳狀態資訊
  2. client向tracker上傳請求連線
  3. tracker查詢可用storage
  4. tracker返回可用storage的ip和埠
  5. 上傳檔案
  6. storage生成file-id
  7. storage將內容寫入磁碟
  8. storage向client返回file-id路徑和檔名
  9. client儲存檔案資訊

下載流程

  1. storage定時向tracker上傳狀態資訊
  2. client向tracker上傳請求連線
  3. tracker查詢可用storage
  4. tracker返回可用storage的ip和埠
  5. client向storage傳送file-id路徑資訊
  6. storage查詢檔案
  7. storage返回file-content

搭建FastDFS步驟

複製壓縮包到伺服器

  • fastdfs-nginx-module_v1.16.tar.gz
  • FastDFS_v5.05.tar.gz
  • libfastcommonV1.0.7.tar.gz

安裝libevent和perl

yum -y install libevent

yum install perl

安裝libfastcommon

  • 解壓
  • ./make.sh
  • ./make.sh install
  • 把/usr/lib64/libfastcommon.so檔案向/usr/lib/下複製一份

安裝Tracker

  • 解壓FastDFS_v5.05.tar.gz
  • ./make.sh
  • ./make.sh install
  • 把cp –r /root/FastDFS/conf目錄下的所有的配置檔案都複製到/etc/fdfs下
  • 注意使用cp -r,否則報錯cp: omitting directory ‘/root/FastDFS/conf

注意:檢查/etc/fdfs下mime.typeshttp.conf是否成功從/root/FastDFS/conf中拷貝成功,否則後面的nginx伺服器訪問時一直載入!

  • cp ~/FastDFS/conf/mime.types /etc/fdfs
  • cp ~/FastDFS/conf/http.conf /etc/fdfs

新建資料夾

  • 新建資料夾/home/fastdfs/tracker
  • 新建資料夾/home/fastdfs/storage
  • 新建資料夾/home/fastdfs/client

配置tracker服務

修改/root/FastDFS/conf/tracker.conf檔案。

base_path=/home/fastdfs/tracker

複製到/etc/fdfs下cp tracker.conf /etc/fdfs。

啟動tracker服務

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

重新啟動:

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

配置storage服務

如果是在不同的伺服器安裝,需要重新執行配置tracker之前的四步。

配置storage服務:修改/root/FastDFS/conf/storage.conf檔案

base_path=/home/fastdfs/storage
store_path0=/home/fastdfs/storage
tracker_server=192.168.52.129:22122

啟動storage服務

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

測試服務

  • 進入/etc/fdfs/資料夾
  • 複製配置檔案/etc/fdfs/client.conf.sample為/etc/fdfs/client.conf
  • 複製一個圖片zxc.jpg到/etc/fdfs/資料夾
  • 編輯client.conf
base_path=/home/fastdfs/client
tracker_server=192.168.52.129:22122

測試

/usr/bin/fdfs_test /etc/fdfs/client.conf upload zxc.jpg

如果顯示如下資訊則成功:

tracker_query_storage_store_list_without_group: 
        server 1. group_name=, ip_addr=192.168.52.129, port=23000

group_name=group1, ip_addr=192.168.52.129, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKg0gVvliFOAFTCcAAIEbfjnAjM334.jpg
source ip address: 192.168.52.129
file timestamp=2018-11-09 08:14:59
file size=132205
file crc32=4175888947
example file url: http://192.168.52.129/group1/M00/00/00/wKg0gVvliFOAFTCcAAIEbfjnAjM334.jpg
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKg0gVvliFOAFTCcAAIEbfjnAjM334_big.jpg
source ip address: 192.168.52.129
file timestamp=2018-11-09 08:14:59
file size=132205
file crc32=4175888947
example file url: http://192.168.52.129/group1/M00/00/00/wKg0gVvliFOAFTCcAAIEbfjnAjM334_big.jpg

搭建nginx提供http服務

參考部落格(https://www.cnblogs.com/tc520/p/6822412.html)

可以使用官方提供的nginx外掛,要使用nginx外掛需要重新編譯。

  1. 解壓fastdfs-nginx-module_v1.16.tar.gz
  2. 改/root/fastdfs-nginx-module/src/config檔案,把其中的三個local去掉
  3. 安裝nginx重新config
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/root/fastdfs-nginx-module/src
  1. make
  2. make install
  3. /root/fastdfs-nginx-module/src/mod_fastdfs.conf檔案複製到/etc/fdfs目錄下
  4. 編輯/etc/fdfs/mod_fastdfs.conf
base_path=/tmp
tracker_server=192.168.52.129:22122
url_hava_group_name=true
store_path0=/home/fastdfs/storage
  1. 在nginx的配置檔案/usr/local/nginx/conf/nginx.conf中修改Server:
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location ~/group([0-9])/M00/{
                ngx_fastdfs_module;
        }
  1. libfdfsclient.so拷貝至/usr/lib下
cp /usr/lib64/libfdfsclient.so /usr/lib/
  1. 啟動nginx,瀏覽器訪問localhost
  2. 測試:/usr/bin/fdfs_test /etc/fdfs/client.conf upload girl.jpg
  3. 訪問生成的連結http://192.168.52.129/group1/M00/00/00/wKg0gVvmcmCAXXqFAAChaTZy5ds776_big.jpg

訪問不了nginx

  1. 檢查防火牆是否埠可訪問
vi /etc/sysconfig/iptables

檢查如下埠是否開啟:

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT

儲存,重啟防火牆

service iptables restart
  1. 檢查/etc/fdfs下mime.typeshttp.conf是否成功從/root/FastDFS/conf中拷貝成功,否則後面的nginx伺服器訪問時一直載入!
  • cp ~/FastDFS/conf/mime.types /etc/fdfs
  • cp ~/FastDFS/conf/http.conf /etc/fdfs