IT评测·应用市场-qidao123.com
标题:
nginx笔记2-实现端口转发
[打印本页]
作者:
来自云龙湖轮廓分明的月亮
时间:
2025-3-7 18:25
标题:
nginx笔记2-实现端口转发
一、代理http转发
nginx设置端口转发的功能是可以实现反向代理
可以设置nginx.conf文件或者在conf.d目次下加conf文件
示例代码如下:
server {
listen 80;
server_name 域名或者IP地址;
location / {
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080; # 当你访问80端口可以实现向8080端口转发
}
}
复制代码
二、nginx转发还可以使用stream的方式,实现TCP/UDP代理
Nginx 的 TCP/UDP 代理功能的模块分为焦点模块和辅助模块、焦点模块 stream 必要在编译设置时增加“--with-stream”参数进行编译。焦点模块的全局设置指令如下表所示。
关于上表有以下几点必要阐明。
参数名称 指令值格式 默认值 参数说明
listen address:port[ssl][udp][proxy protocol]
[backlog=number][rcvbuf=size] -- stream 监听协议及端口
listen [sndbuf=size][bind][ipv6only=on 或 off]
[reuseport][so_keepalive=on 或 off 或
[keepidle]:[keepintvl]:[keepent]] -- stream 监听协议及端口
preread_buffer_size size 16k 设置每个会话数据预读缓冲区的大小
preread_timeout timeout 30s 设置每个会话数据预读取的超时时间
proxy_protocol_timeout timeout 30s 读取代理协议头的超时时间
resolver address... [valid=time][ipv6=on 或 off] -- 域名解析服务器地址
resolver_timeout time 30s 域名解析超时时间
tcp_nodelay on 或 off on 启用或关闭立即发送数据(tcp_nodelay)选项
variables_hash_bucket_size size 64 设置变量哈希表中桶的大小
variables_hash_max_size size 1024 设置变量哈希表的最大值
指令 listen 使用的指令域范围为 server;
指令 variables_hash_bucket_size 和 variables_hash_max_size 使用的指令域范围为 stream;
stream 核心模块其余指令使用的指令域范围为 stream、server;
resolver 指令值可填写多个域名解析服务器地址,各个地址用空格分隔;
复制代码
listen 指令值参数如下表所示。
参数名称 默认 参数说明
ssl -- 在指定监听端口上启用 SSL 协议支持
udp -- 在指定监听端口上启用 UDP 协议支持
proxy_protocol -- 在指定监听端口上启用 proxy_protocol 协议支持
backlog -1/511 设置挂起连接队列的最大长度,在 FreeBSD、DragonFly BSD 和 macOS 操作系统上,设置默认值为 -1,其他平台为 511
rcvbuf -- 设置套接字(socket)接收缓冲区(SO_RCVBUF 选项)的大小,Linux 操作系统下默认值为内核参数 net.core.rmem_default 的值
sndbuf -- 设置套接字(socket)发送缓冲区(SO_SNDBUF 选项)的大小,Linux 操作系统下默认值为内核参数 net.core.wmem_default 的值
bind -- address:port 指定 IP 及端口
ipv6only on 只接收 IPv6 连接,或接收 IPv6 和 IPv4 连接
reuseport -- 在默认情况下,所有的工作进程都会共享一个 socket 去监听同一 IP 和端口的组合。
该参数启用后,允许每个工作进程由独立的 socket 去监听同一 IP 和端口的组合,内核会对传入的连接进行负载均衡。目前,它只适用于 Linux 3.9+、DragonFly BSD 和 FreeBSD 12+
so_keepalive off 配置监听的端口启用 TCP keepalive 机制时的心跳检测参数。当指令值为 on 时,默认等同于 so_keepalive=30m::10,表示 30 分钟无数据传输时发送探测包,总共发送 10 次,发送时间间隔为系统内核参数 tcp_keepalive_intvl 的设定值。
配置样例如下:
stream {
resolver 114.114.114.114 valid=300s;
resolver_timeout 2s;
upstream backend {
server 192.168.0.1:333;
server www.example.com:333;
}
server {
listen 127.0.0.1:333 udp reuseport;
proxy_timeout 20s;
proxy_pass backend;
}
server {
listen [::1]:12345;
proxy_pass unix:/tmp/stream.socket;
}
}
复制代码
三、设置参数阐明:
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、$host
proxy_port和$host
server_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企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4