一、代理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企服之家,中国第一个企服评测及商务社交产业平台。 |