nginx笔记2-实现端口转发

打印 上一主题 下一主题

主题 935|帖子 935|积分 2815

一、代理http转发

nginx设置端口转发的功能是可以实现反向代理
可以设置nginx.conf文件或者在conf.d目次下加conf文件
示例代码如下:
  1. server {
  2.     listen  80;
  3.     server_name     域名或者IP地址;
  4.     location / {
  5.         proxy_set_header Host $host;
  6.         proxy_pass      http://127.0.0.1:8080; # 当你访问80端口可以实现向8080端口转发
  7.     }
  8. }
复制代码
二、nginx转发还可以使用stream的方式,实现TCP/UDP代理

Nginx 的 TCP/UDP 代理功能的模块分为焦点模块和辅助模块、焦点模块 stream 必要在编译设置时增加“--with-stream”参数进行编译。焦点模块的全局设置指令如下表所示。
关于上表有以下几点必要阐明。
  1. 参数名称    指令值格式    默认值    参数说明
  2. listen    address:port[ssl][udp][proxy protocol]
  3. [backlog=number][rcvbuf=size]    --    stream 监听协议及端口
  4. listen    [sndbuf=size][bind][ipv6only=on 或 off]
  5. [reuseport][so_keepalive=on 或 off 或
  6. [keepidle]:[keepintvl]:[keepent]]    --    stream 监听协议及端口
  7. preread_buffer_size    size    16k    设置每个会话数据预读缓冲区的大小
  8. preread_timeout    timeout    30s    设置每个会话数据预读取的超时时间
  9. proxy_protocol_timeout    timeout    30s    读取代理协议头的超时时间
  10. resolver    address... [valid=time][ipv6=on 或 off]    --    域名解析服务器地址
  11. resolver_timeout    time    30s    域名解析超时时间
  12. tcp_nodelay    on 或 off    on    启用或关闭立即发送数据(tcp_nodelay)选项
  13. variables_hash_bucket_size    size    64    设置变量哈希表中桶的大小
  14. variables_hash_max_size    size    1024    设置变量哈希表的最大值
  15. 指令 listen 使用的指令域范围为 server;
  16. 指令 variables_hash_bucket_size 和 variables_hash_max_size 使用的指令域范围为 stream;
  17. stream 核心模块其余指令使用的指令域范围为 stream、server;
  18. resolver 指令值可填写多个域名解析服务器地址,各个地址用空格分隔;
复制代码
listen 指令值参数如下表所示。
  1. 参数名称    默认    参数说明
  2. ssl    --    在指定监听端口上启用 SSL 协议支持
  3. udp    --    在指定监听端口上启用 UDP 协议支持
  4. proxy_protocol    --    在指定监听端口上启用 proxy_protocol 协议支持
  5. backlog    -1/511    设置挂起连接队列的最大长度,在 FreeBSD、DragonFly BSD 和 macOS 操作系统上,设置默认值为 -1,其他平台为 511
  6. rcvbuf    --    设置套接字(socket)接收缓冲区(SO_RCVBUF 选项)的大小,Linux 操作系统下默认值为内核参数 net.core.rmem_default 的值
  7. sndbuf    --    设置套接字(socket)发送缓冲区(SO_SNDBUF 选项)的大小,Linux 操作系统下默认值为内核参数 net.core.wmem_default 的值
  8. bind    --    address:port 指定 IP 及端口
  9. ipv6only    on    只接收 IPv6 连接,或接收 IPv6 和 IPv4 连接
  10. reuseport    --    在默认情况下,所有的工作进程都会共享一个 socket 去监听同一 IP 和端口的组合。
  11.     该参数启用后,允许每个工作进程由独立的 socket 去监听同一 IP 和端口的组合,内核会对传入的连接进行负载均衡。目前,它只适用于 Linux 3.9+、DragonFly BSD 和 FreeBSD 12+
  12. so_keepalive    off    配置监听的端口启用 TCP keepalive 机制时的心跳检测参数。当指令值为 on 时,默认等同于 so_keepalive=30m::10,表示 30 分钟无数据传输时发送探测包,总共发送 10 次,发送时间间隔为系统内核参数 tcp_keepalive_intvl 的设定值。
  13. 配置样例如下:
  14. stream {
  15.     resolver 114.114.114.114 valid=300s; 
  16.     resolver_timeout 2s;
  17.  
  18.     upstream backend {
  19.        server 192.168.0.1:333;
  20.        server www.example.com:333;
  21.     }
  22.  
  23.     server {
  24.         listen 127.0.0.1:333 udp reuseport;
  25.         proxy_timeout 20s;
  26.         proxy_pass backend;
  27.     }
  28.  
  29.     server {
  30.         listen [::1]:12345;
  31.         proxy_pass unix:/tmp/stream.socket;
  32.     }
  33. }
复制代码
三、设置参数阐明:

listen:
表示你该设置的server所监听的端口号。
server_name:
用于设置虚拟主机服务名称,如:127.0.0.1 、 localhost 、域名
比方,在windows本地主机上进行修改该设置,则当访问该名称时会被nginx拦截,这里或者直接在C:\WINDOWS\system32\drivers\etc\hosts修改,也能到达此效果。
location :
location后面跟着的路径匹配是你访问80端口时所匹配的路径,当匹配到该路径时会被拦截,并进行路径转发。你可以在一个server内里设置多个location。
proxy_set_header:
参考nginx设置中$http_host、$host、$hostproxy_port和$hostserver_port区别-CSDN博客
proxy_pass:
你所想转发的路径。
proxy_redirect:
用来设置url重定向
四、报错问题解决:

nginx报错1:“ [emerg] unknown directive “stream“ in /etc/nginx/nginx.conf ”问题
解决办法:
# 安装nginx源
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 先安装
yum -y install epel-release 
# 应该是缺少modules模块
yum -y install nginx-all-modules.noarch
# 然后在用nginx -t就好了
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

来自云龙湖轮廓分明的月亮

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表