nginx及tcp代理分发

本文介绍如何在Nginx 1.9以上版本中配置TCP代理,包括编译安装Nginx、配置代理规则及简单测试等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:http://blog.youkuaiyun.com/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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值