您的位置:首页 > 理论基础 > 计算机网络

nginx及tcp代理分发

2017-05-24 17:18 295 查看
参考:http://blog.csdn.net/chan112147/article/details/50461716

1.9以上的版本不需要安装nginx_tcp_proxy_module 

将nginx-1.9.9.tar.gz解压
tar -zxvf nginx-1.9.9.tar.gz
mv nginx-1.9.9 nginx
cd nginx

./configure --prefix=/usr/local/nginx --with-stream

出现:cp: `conf/koi-win' and `/usr/local/nginx/conf/koi-win' are the same file
./configure缺少--conf-path这个选项,将这一步加上:  --conf-path=/usr/local/nginx/nginx.conf(不要设置 --conf-path=/usr/local/nginx/conf/nginx.conf,因为这个路径下已经有一个这样的文件)

yum install pcre-devel

yum install zlib-devel

编译nginx
make
make install 

cd /usr/local/nginx/conf
vim nginx.conf

修改配置文件

http

{

....

}

stream {

    server {

        listen 8000;

        proxy_pass app;

    }

    upstream app {

        server 192.168.1.XX:8000;

        server 192.168.1.XXX:8000;

        server 192.168.1.X:8000;

    }

}

启动nginx,并查看进程

[root@localhost nginx]# ps -ef | grep nginx

root      6776     1  0 11:45 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

nobody    6777  6776  0 11:45 ?        00:00:00 nginx: worker process

nobody    6778  6776  0 11:45 ?        00:00:00 nginx: worker process

nobody    6779  6776  0 11:45 ?        00:00:00 nginx: worker process

nobody    6780  6776  0 11:45 ?        00:00:00 nginx: worker process

nobody    6781  6776  0 11:45 ?        00:00:00 nginx: worker process

nobody    6782  6776  0 11:45 ?        00:00:00 nginx: worker process

nobody    6783  6776  0 11:45 ?        00:00:00 nginx: worker process

nobody    6784  6776  0 11:45 ?        00:00:00 nginx: worker process

root      6792 23801  0 11:55 pts/2    00:00:00 grep --color=auto nginx

// 测试



        server 192.168.1.XX:8000;

        server 192.168.1.XXX:8000;

        server 192.168.1.X:8000;

这三台机器 做个简单的服务(simple_server.c)

telnet  192.168.1.178:8000(telnet nginx的IP 8000)

并查看被监听的8000端口

[root@localhost ~]# netstat -apn| grep :8000

tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      7605/nginx: master  

tcp        0      0 192.168.1.178:8000     192.168.1.187:13601    ESTABLISHED 7608/nginx: worker  

tcp        0      0 192.168.1.178:44565    192.168.1.182:8000     ESTABLISHED 7608/nginx: worker  

证明已经转发了!!!

// simple_server.c////////////////////gcc -g -o simple_server simple_server.c

#include <stdio.h>

#include <string.h>

#include <unistd.h>

#include <ctype.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <stdlib.h>

#include <errno.h>

//gcc -g -o simple_server simple_server.c

int main(int argc,char *argv[])

{

    int port=8000;

    int server_listen_fd;

    int server_accept_fd;

    struct sockaddr_in server_listen_addr;

    struct sockaddr_in server_accept_addr;

    bzero(&server_listen_addr,sizeof(server_listen_addr));

    bzero(&server_accept_addr,sizeof(server_accept_addr));

    server_listen_addr.sin_family=AF_INET; 

    server_listen_addr.sin_addr.s_addr=INADDR_ANY;

    server_listen_addr.sin_port=htons(port);

    server_listen_fd=socket(AF_INET,SOCK_STREAM,0);

    if(-1==server_listen_fd)

     {

       perror("fail to create socket!");

       exit(1);

     }

    if(bind(server_listen_fd,(struct sockaddr*)&server_listen_addr,

            sizeof(server_listen_addr))==-1)

      {

        perror("can't to bind");

        exit(1);

      }

     if(listen(server_listen_fd,10)==-1)

      {

        perror("can't to bind");

        exit(1);

      }

      while(1)

        { 

          int size=sizeof(server_accept_addr);

          printf("server socket begin accept:n");

          server_accept_fd=accept(server_listen_fd,(struct sockaddr*)&server_accept_addr,&size);

          printf("accept con_fd=%dn",con_fd);

          if(server_accept_fd<0)

          {           

              perror("error:socket accept!exited!n");           

              exit(1);           

          }

          int num=0;

          char data[200]={0};     

          int ret=read(server_accept_fd,(void*)data,199);       

          close(server_accept_fd);

          printf("DATA:[%s]n",data);

        }

    return 1;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: