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;
}
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;
}
相关文章推荐
- Nginx实现TCP反向代理
- nginx反向代理TCP,取RTMP流
- nginx1.9+做TCP代理(端口转发)
- Nginx 限制访问 - 限制对代理TCP资源的访问
- nginx 代理tcp长连接短连接配置
- Nginx发布1.9.0版本,新增支持TCP代理和负载均衡的stream模块
- nginx1.9+新增tcp/udp代理stream
- nginx作为tcp代理 虚拟主机配置 模板
- nginx : TCP代理和负载均衡的stream模块
- nginx 反向代理TCP mysql
- Nginx限制访问代理TCP资源
- 现在使用Nginx实现TCP反向代理
- Nginx发布1.9.0版本,新增支持TCP代理和负载均衡的stream模块
- nginx支持tcp代理mysql
- nginx之TCP反向代理
- nginx1.9+新增tcp/udp代理stream
- nginx反向代理TCP,取RTMP流
- Nginx发布1.9.0版本,新增支持TCP代理和负载均衡的stream模块
- nginx 设置多个tcp IP代理 socket 转发
- Nginx TCP/UDP 代理