CC's blog

CC的技术博客 专注于 it 互联网的技术爱好者

分类 服务器 下的文章

内网穿透

首先有一台运行ngrok 服务端的服务器,这是完成整个转发过程的核心。
在这台运行ngrok服务端的服务器上绑定一个域名 ngrok.mydomain.com
再将两个测试域名 test.ngrok.mydomain.com和test2.ngrok.mydomain.com以 CNAME 的方式添加到 DNS 记录里面,把请求者两个测试域名的数据全部转发到ngrok服务器端运行的服务器ngrok.mydomaincom上面



阅读全文
none

怎么在 linux 上搭建一个 nginx + rtmp 直播服务器

1.安装编译工具及库文件(使用yum命令安装)

yum install -y apr* autoconf automake bison bzip2 bzip2* cloog-ppl compat* cpp curl curl-devel fontconfig fontconfig-devel freetype freetype* freetype-devel gcc gcc-c++ gtk+-devel gd gettext gettext-devel glibc kernel kernel-headers keyutils keyutils-libs-devel krb5-devel libcom_err-devel libpng libpng* libpng-devel libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libgomp libxml2 libxml2-devel libXpm* libX* libtiff libtiff* make mpfr ncurses* ntp openssl nasm nasm* openssl-devel patch pcre-devel perl php-common php-gd policycoreutils ppl telnet t1lib t1lib* wget zlib-devel libxml2 libxml2-devel libxslt libxslt-devel unzip

2.源码下载

nginx源码

nginx-rtmp源码

3.解压源码

tar -zxvf ***.tar.gz

4.编译安装

cd nginx-1.10.2

./configure --add-module=../nginx-rtmp-module-master

make

sudo make install

5.环境配置

首先要做的(如果之前配置过nginx,比如反向代理),就是stop当前正在运行的nginx,并关闭开机自启动

/etc/init.d/nginx stop
chkconfig --level 2345 nginx off

之后流媒体服务器(点播、直播)的配置,参考http://lib.csdn.net/article/57/37915?knId=1549,不再重复造轮子

注意:点播支持flv、mp4 视频h264音频aac格式

6.ffmpeg测试命令

推流
ffmpeg -re -i test.avi -vcodec h264 -acodec aac -f flv rtmp://219.216.87.99/live/test1
转码
ffmpeg -i test.avi -acodec aac -vcodec h264 -f flv test.flv
7.开机自启

./usr/local/nginx/sbin/nginx

重点来了

在此视频直播的基础上,继续配置nginx反向代理

主要修改nginx.conf就可以实现,这里有个问题,就是配置rtmp时,使用了http服务器的部分,相当于主域名www会由配置流媒体服务器的那个http server响应。原来nginx只是作为反向代理,自己不提供内容。这样原来由apache响应的index就要交给nginx。

直接看配置吧

user  nginx;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}
rtmp {
    server {
        listen 1935;
        chunk_size 4096;
        application vod {
            play /home/yourname/videoServer/vod;
        }
        application vod_http {
            #play http://video.yourname.cn/vod;
            play http://localhost/vod;
        }

        application live {
            live on;
        }

        application hls {
            live on;
            hls on;
            hls_path /home/yourname/videoServer/hls;
            wait_key on;
            hls_fragment 10s;
            hls_playlist_length 60s;
            hls_continuous on;
            hls_cleanup on;
            hls_nested on;
        }
    }
}


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  logs/access.log  main;

    sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
    keepalive_timeout  65;

#gzip  on;

    server {
        listen       80;
        server_name  www.yourname.cn;

        location / {
            root   html;
            index  index.html index.htm;
        }
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
        location /stat.xsl {
            root /usr/local/nginx/livestats/;
        }

        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            add_header Cache-Control no-cache;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }



    upstream tomcat{
        server localhost:8081;
    }
    server {
        listen      80;
        server_name     tom.yourname.cn;
        location / {
            proxy_pass      http://tomcat;
            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;
        }

    }

    upstream apache_index{
        server localhost:9080;
    }
    server {
        listen          80;
        server_name     video.yourname.cn;#此前这是www,现在变成二级域名
        location / {
            proxy_pass              http://apache_index;
            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;
        }

    }


    upstream apache_blog{
        server localhost:9090;
    }
    server {
        listen          80; 
        server_name     blog.yourname.cn;
        location / {
            proxy_pass              http://apache_blog;
            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;
        }

    }
    upstream apache_bbs{
        server localhost:9095;
    }
    server {
        listen          80;
        server_name     bbs.yourname.cn;
        location / {
            proxy_pass              http://apache_bbs;
            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;
        }

    }

}
阅读全文

nginx-tomcat 均衡负载

Nginx集群配置

首先要把3个虚拟主机的域名(a.ieread.com、b.ieread.com、c.ieread.com)都指向到nginx机的公网ip上。 然后还是修改nginx的配置文件nginx.conf: 配置文件中upstream段还是保持不变,依旧是3个tomcat集群机的地址及负载因子:

upstream tomcats {
  server 192.168.0.11:8080 weight=1;
  server 192.168.0.12:8080 weight=1;
  server 192.168.0.13:8080 weight=1;
}

因为有3个应用,所以应该有3个server段,这里只写其中一个,其他两个只需要修改一下server_name即可:

upstream tomcats {
  server 192.168.0.11:8080 weight=1;
  server 192.168.0.12:8080 weight=1;
  server 192.168.0.13:8080 weight=1;
}

proxy_set_header是nginx的http代理模块中的一个指令。 在nginx中的默认proxy是只能对后面real server做端口转发的,而不能做域名转发,即默认的是: proxy_set_header Host $proxy_host; 我们要通过域名转发就必须改为: proxy_set_header Host $host;

最后修改tomcat的配置文件server.xml,主要是配置虚拟主机:

upstream tomcats {
  server 192.168.0.11:8080 weight=1;
  server 192.168.0.12:8080 weight=1;
  server 192.168.0.13:8080 weight=1;
}

3台集群机均改成上面一样的。

Tomcat集群配置 运行多个tomcat需要修改每个tomcatd的端口。 在tomcatconfserver.xml这里面对涉及的端口进行修改

sesession 共享 通过上面的配置,我们已经完成了nginx+tomcat的负载均衡,接下来我们要考虑如何让book.ieread.com下的项目session同步。
这里我使用的是memcached-session-manager;

首先,我们需要下载JAR包:
javolution-5.4.3.1.jar,msm-javolution-serializer-1.4.1.jar,memcached-session-manager-1.4.1.jar
http://code.google.com/p/memcached-session-manager/downloads/list
下载JAR包:memcached-2.5.jar http://code.google.com/p/spymemcached/downloads/list

将4个jar包放在tomcat的lib包中。 然后修改tomcatd的service.xml文件,添加红色部分配置。

upstream tomcats {
  server 192.168.0.11:8080 weight=1;
  server 192.168.0.12:8080 weight=1;
  server 192.168.0.13:8080 weight=1;
}

测试sesession 共享 添加msem.jsp文件

upstream tomcats {
  server 192.168.0.11:8080 weight=1;
  server 192.168.0.12:8080 weight=1;
  server 192.168.0.13:8080 weight=1;
}

Http://localhost:8080/msem.jsp可以看见不同的项目具有相同的sesessionID。

阅读全文
none

nginx禁止访问目录或文件

在nginx要禁止某个或一类资源,只需要增加一个location,然后在其中使用deny all即可。

禁止访问扩展名为bat的文件,配置如下:

location ~* /.bat { deny all; }

禁止访问configs目录,以及其下所有子目录或文件,配置如下:</span>

location ^~ /configs/ { deny all; }

注意上述configs后面的斜杠不能少,否则所有以configs开头的目录或文件都将禁止访问

阅读全文

nginx反向代理

带ssl配置


server {
  listen 80;
  server_name www.2x0.cn 2x0.cn;
  # enforce https
  return 301 https://$server_name$request_uri;   #301跳转到443
}
server {
  listen 443 ssl;
  server_name www.2x0.cn;

  ssl_certificate /home/ssl/myssl.crt;   #ssl证书目录
  ssl_certificate_key /home/ssl/myssl.key;
        root  /home/wwwroot/www.2x0.cn;

不带ssl配置



server {
  listen 80;
  server_name www.2x0.cn;

  
        root  /home/wwwroot/www.2x0.cn;

        #error_page   404   /404.html;
      location / {  
sub_filter www.2x0.cn 127.0.0.1:8080;  
sub_filter_once off;  
proxy_set_header X-Real-IP $remote_addr;  
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
proxy_set_header Referer http://127.0.0.1:8080;  
proxy_set_header Host www.2x0.cn;  
proxy_pass http://127.0.0.1:8080;  
proxy_set_header Accept-Encoding "";  
} 


        access_log  /home/wwwlogs/www.2x0.cn.log  access;
    }


阅读全文