人若无名,便可专心练剑

 nginx 标签

nginx +apache2+subversion ssl报错问题解决

  |   0 评论   |   3,814 浏览

链路结构:

user-----------https链路------------------nginx--------http链路--------apache

问题:

nginx svn: Server sent unexpected return value (502 Bad Gateway) in response to COPY request for
解决方法:


set $fixed_destination $http_destination;  
if ( $http_destination ~* ^https(.*)$ ) {  
    set $fixed_destination http$1;  
}  
proxy_set_header Destination $fixed_destination; 


参考解决:

https://sigterm.sh/2012/10/09/nginx-apache-2-and-subversion-502-bad-gateway-error/

nginx 源码编译 问题解决

  |   0 评论   |   1,953 浏览

准备把blog通过nginx代理于是下载nginx源码进行编译安装。

配置nginx时报错

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
安装pcre-devel解决问题
[root@c2y2 nginx-1.8.0]# yum -y install pcre-devel

分布式文件系统fastDFS+Nginx 集成

  |   0 评论   |   8,612 浏览
架构:
跟踪节点(tracker) :跟踪器主要做调度工作,在访问上起负载均衡的作用
                                   比如我们上传文件时需先向tacker节点申请存储节点,tracker根据资源情况给我们返回一台存储节点,并通过返回的存储节点上传到存储节点服务器(存储节点间数据自动同步)

存储节点(storager):存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,
                                   FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,
                                   以键值对(key valuepair)方式表示,如:width=1024,其中的key为width,value为1024。
                                   文件metadata是文件属性列表,可以 包含多个键值对


环境:Centos6.5
tracker:192.168.3.111 cluster1  nginx1:用作负载
storager:   192.168.3.112 cluster2  nginx2:用于存储节点1文件获取  192.168.3.113 cluster3 nginx3:用于存储节点2文件获取 


环境准备:
 yum -y install gcc gcc+ gcc-c++ openssl openssl-devel pcre pcre-devel git libevent

 另外需要安装额外的commonlib包:



 需要准备一个用户和一个用户组:
 useradd fastdfs -M -s /sbin/nologin (默认会创建一个用户组)
 
 useradd nginx -M -s /sbin/nologin (默认会创建一个用户组) 

安装:
(注:无论tracker节点,还是storager节点安装都一样 ,安装记录只以tracker为准 。但是如果安装nginx集成则有点不一样,nginx只需在storage节点安装fastdfs-nginx-module模块
       下载安装文件: fastdfs:

1,下载
当前目录:/home/cluster1
[root@localhost cluster1]# git clone https://github.com/happyfish100/fastdfs.git 
下载nginx 
[root@localhost cluster1]# git clone https://github.com/nginx/nginx.git
下载fastdfs-nginx-module 模块
[root@localhost cluster1]# git clone https://github.com/happyfish100/fastdfs-nginx-module.git
 2,安装
   [root@localhost cluster1]#  cd fastdfs
   [root@localhost cluster1]# ./make.sh && ./make.sh install
安装nginx:
  [root@localhost cluster1]#cd nginx
  [root@localhost cluster1]#    ./configure --user=nginx --group=nginx 
  如果为存储节点编译安装时需要加载集成插件
  [root@localhost cluster2]#    ./configure --user=nginx --group=nginx   --add-module=/home/cluster3/fastdfs-nginx-module/src

说明:安装后程序会默认安装到系统bin目录下
3,拷贝几个额外的配置文件(安装后/etc/fdfs/ 目录下已经有这么几个默认文件:client.conf.sample   storage.conf.sample  tracker.conf.sample)
    [root@localhost cluster1]#   cp -rv /home/cluster1/fastdfs/conf/httpd.conf /etc/fdfs/  (如果要用httpserver 或者使用nginx作为文件获取服务器必须要这个文件)
    [root@localhost cluster1]#   cp -rv /home/cluster1/fastdfs/conf/mime.types /etc/fdfs/ 
4,关闭防火墙或则建立防火墙规则(很重要
      

配置:
(注意:配置tracker 和storager 存在区别)

1,tracker 配置
     a,创建相关数据存放目录
          [root@localhost cluster1]# mkdir -p /data/fastdfs/tracker
     b, copy配置模板文件
           [root@localhost cluster1]#   cp -rv /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
      c, 配置copy的后文件
           [root@localhost cluster1]#   vim  /etc/fdfs/tracker.conf
           将该文件做以下修改:
               base_path=/data/fastdfs/tracker
               store_lookup=0
               store_group=g1 #(上传文件时存放的组名)
               store_path=0
               run_by_group=fastdfs
               run_by_user=fastdfs
               rotate_error_log=true

            默认会启动自带的httpserver 我们可以注销掉相关配置:
               # HTTP port on this tracker server
               #http.server_port=8080
               # check storage HTTP server alive interval seconds
               # <= 0 for never check
               # default value is 30
               #http.check_alive_interval=30
               # check storage HTTP server alive type, values are:
               #   tcp : connect to the storge server with HTTP port only,
               #        do not request and get response
               #   http: storage check alive url must return http status 200
               # default value is tcp
               #http.check_alive_type=tcp

               # check storage HTTP server alive uri/url
               # NOTE: storage embed HTTP server support uri: /status.html
               #http.check_alive_uri=/status.html
       d:配置服务项并注册为服务
               [root@localhost  cluster1]# cp /home/cluster1/fastdfs/init.d/fdfs_trackerd /etc/init.d/
               [root@localhost  cluster1]# chkconfig --add fdfs_trackerd
               [root@localhost  cluster1]# chkconfig fdfs_trackerd on


tracker节点nginx配置:
  [root@localhost  cluster1]# vim /usr/local/nginx/conf/nginx.conf
     user nginx nginx;
    pid        /usr/local/nginx/logs/nginx.pid;
    worker_rlimit_nofile 1024;
    events {
    use epoll;
    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  /usr/local/nginx/logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    upstream server_g1{
                server 192.168.3.112:80;
                server 192.168.3.113:80;
        }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

       # location / {
        #    root   html;
         #   index  index.html index.htm;
        #}

        location / {
                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;
       }
}
}
2,配置storager (使用cluster2,另外cluster3 也如此 )
             a,创建相关数据存放目录
          [root@localhost cluster2]# mkdir -p /data/fastdfs/storage/data
           b, copy配置模板文件
           [root@localhost cluster2]#   cp -rv /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
           [root@localhost cluster2]#   cp -rv  /home/cluster2/fastdfs-nginx-module/src/mod_fastdfs.conf  /etc/fdfs/mod_fastdfs.conf
          c, 配置copy的后文件
           [root@localhost cluster2]#   vim  /etc/fdfs/storage.conf
               将该文件做以下修改:
                    group_name=g1  #(和tracker节点 保持一致性)
                    base_path=/data/fastdfs
                    store_path_count=1
                    store_path0=/data/fastdfs/storage
                    tracker_server=192.168.3.111:22122 #tracker 节点 
                    run_by_group=fastdfs
                    run_by_user=fastdfs
                    file_distribute_path_mode=1 #文件分布式路径模式 开启
                    rotate_error_log=true #开启错误日志

              默认会启动自带的httpserver 建议注销掉相关配置:  
                       # use the ip address of this storage server if domain_name is empty,
                       # else this domain name will ocur in the url redirected by the tracker server
                       #http.domain_name=
                       # the port of the web server on this storage server
                      #http.server_port=80

         配置mod_fastdfs.conf 插件配置文件其他项保持不变或者根据自己需要配置
     tracker_server=192.168.3.111:22122
     group_name=g1
     url_have_group_name = true
     store_path_count=1
     store_path0=/data/fastdfs/storage  

注意:mod_fastdfs.conf 先关属性配置必须和storage.conf 配置保持一致

          d:修改httpd.conf 文件 
               #http.anti_steal.secret_key=FastDFS1234567890
               #http.anti_steal.token_check_fail=/home/yuqing/fastdfs/conf/anti-steal.jpg


               配置Nginx 配置
               [root@localhost cluster2]# vim /usr/local/nginx/conf/nginx.conf
               user nginx nginx;
                pid /usr/local/nginx/logs/nginx.pid;
       worker_rlimit_nofile 1024;
     events {
         use epoll;
         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"';

          sendfile        on;
          #tcp_nopush     on;
          #keepalive_timeout  0;
           keepalive_timeout  65;
           #gzip  on;
         server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        access_log /usr/local/nginx/logs/access.log main;
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /g1/M00{
                root /data/fastdfs/storage/data;
                ngx_fastdfs_module;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 }
      }                         
          e: 配置并注册成为系统服务(我们也可以不注册成为系统服务,使用全路径名启动)
               [root@localhost cluster2]# cp /home/cluster2/fastdfs/init.d/fdfs_storaged/ /etc/init.d/fdfs_storaged
               [root@localhost cluster2]# chkconfig --add fdfs_storaged
               [root@localhost cluster2]# chkconfig fdfs_storaged on
3,测试
      a, 启动tracker节点
             [root@localhost cluster1]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
              查看是否启动成功(我们可以使用ps或者netstat 命令查看端口22122)

               nginx 启动:
            [root@localhost cluster1] /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
      b, 启动storage节点
              [root@localhost ~]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
                查看是否启动成功(我们可以使用ps或者netstat 命令查看端口 23000)
              nginx 启动:
            [root@localhost cluster1] /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
                
     配置客户端进行上传或者下载(实例为:命令行上传下载   另外官方提供了 java的lib包 也可以使用java 实现上传下载)
       c:配置客户端配置
               我们以cluster2 为客户机
             [root@localhost cluster2]# pwd
               /home/cluster2
             [root@localhost cluster2]#vim client.conf
             加入如下内容并保存:
               base_path=/data/fastdfs
               tracker_server=192.168.3.111:22122    
       测试上传文件:
          [root@localhost cluster2]# fdfs_upload_file client.conf nginx.tar.gz   #格式 fdfs_upload_file  配置文件 需要上传的文件
          g1/M00/DC/17/wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz #上传成功后返回的路径
          测试下载文件 
           [root@localhost cluster2]# fdfs_download_file client.conf g1/M00/DC/17/wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz
[root@localhost cluster2]# ls
client.conf  fastdfs  fastdfs-nginx-module  libfastcommon  mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar.gz  nginx  nginx.tar.gz  wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz
[root@localhost cluster2]# ls -al
total 531072
drwx------.  6 cluster2 cluster2      4096 Jan 20 17:54 .
drwxr-xr-x.  3 root     root          4096 Dec 23 02:59 ..
-rw-------.  1 cluster2 cluster2       603 Jan 16 06:18 .bash_history
-rw-r--r--.  1 cluster2 cluster2        18 Oct 16 06:56 .bash_logout
-rw-r--r--.  1 cluster2 cluster2       176 Oct 16 06:56 .bash_profile
-rw-r--r--.  1 cluster2 cluster2       124 Oct 16 06:56 .bashrc
-rw-r--r--   1 root     root            60 Jan 20 17:42 client.conf
drwxr-xr-x  11 root     root          4096 Jan 20 07:36 fastdfs
drwxr-xr-x   4 root     root          4096 Jan 20 07:52 fastdfs-nginx-module
drwxr-xr-x   5 root     root          4096 Jan 20 07:36 libfastcommon
-rw-rw-r--.  1 cluster2 cluster2 478325708 Jan  5 08:07 mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar.gz
-rw-------.  1 cluster2 cluster2        23 Jan  6 00:57 .ndb_mgm_history
drwxr-xr-x  10 root     root          4096 Jan 20 08:00 nginx
-rw-r--r--   1 root     root      32716800 Jan 20 08:11 nginx.tar.gz  #(先前上传的源文件)
-rw-r--r--   1 root     root      32716800 Jan 20 17:54 wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz (刚刚下载的文件)

文件校验:
     [root@localhost cluster2]# md5sum nginx.tar.gz 
     ba70c99623327cf632a45c10ef4bb423  nginx.tar.gz
     [root@localhost cluster2]# md5sum wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz
     ba70c99623327cf632a45c10ef4bb423  wKgDcFS_BfuAD2xXAfM4AJDnK5k.tar.gz
我们下载的文件内容和我们原来上传的文件内容一致

另外我们可以检查运行状态
[root@localhost cluster2]#fdfs_monitor client.conf

添加nginx后用图片进行测试:
          [root@localhost cluster2]# fdfs_upload_file client.conf 500fd9f9d72a6059496335a02b34349b033bba1d.jpg 
                    g1/M00/5A/78/wKgDcVS_H7qAJI0OAAF9fgUE8_k688.jpg
                然后我们直接用浏览器进行访问:
                nginx1:http://192.168.3.111/g1/M00/5A/78/wKgDcVS_H7qAJI0OAAF9fgUE8_k688.jpg
                         
                         
                nginx3:http://192.168.3.113/g1/M00/5A/78/wKgDcVS_H7qAJI0OAAF9fgUE8_k688.jpg
                         

注意:权限很重要,如果你不知道具体权限怎么设置 请强数据存放目录设置为 777 
          如:数据存放路径/data/fastdfs/storage
          我们设置权限: chmod -R 777  /data/fastdfs


一些常见错误:
ngx_http_fastdfs_process_init pid=17609
ERROR - file: ini_file_reader.c, line: 315, include file "http.conf" not exists, line: "#include http.conf"
ERROR - file: /usr/local/src/fastdfs-nginx-module/src//common.c, line: 155, load conf file
"/etc/fdfs/mod_fastdfs.conf" fail, ret code: 2
 [alert] 17607#0: worker process 17609 exited with fatal code 2 and cannot be respawned

解决方案:

你看下安装包的conf目录下,有几个配置文件,把http.conf,mime.types,拷贝到/etc/fdfs/下,http.conf里有 个配置应该是token验证的功能,如果你要打开

,应该把路径配置正确














nginx+tomcat+memcache 集成

  |   0 评论   |   3,188 浏览

环境:


nginx: 192.168.10.111
tomcat1(7.xx):192.168.10.112
tomcat2(7.xx):192.168.10.110 
memcached:192.168.10.112


nginx:用于负载均衡
tomcat1,tomcat2 用于后端应用部署
memcached  用于tomcat1,tomcat2 session同步

一:nginx配置:
location / {
            proxy_pass http://localhost;
 }
 location /status {
     stub_status on;
        access_log off;     
  }
。。。。其他省略。。。。。。
upstream localhost {
        server 192.168.10.110:8080;
        server 192.168.10.112:8080;
}
二:memcached 安装启动
安装,略。。。。(很简单,编译安装)
启动:


memcached -d -m 64 -p 11211 -u root -c 256 -P /var/run/memcached.pid 


(配置参数视自己的服务器而定吧)


三:tomcat配置

tomcat:所需jar包:

tomcat(memecached)配置 
位置:tomcat 安装目录下 conf/context.xml
加入如下配置:
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:192.168.10.112:11211"
    sticky="true"
    sessionBackupAsync="false"
    lockingMode="uriPattern:/hy-dp-bgweb"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
两个tomcat 均要进行此项配置:并需要将 相应jar包 拷贝到 tomcat的lib目录