参考:http://blog.youkuaiyun.com/chan112147/article/details/50461716
1.9以上的版本不需要安装nginx_tcp_proxy_module
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;
}