jay*_*zee 2 linux networking nginx docker nginx-reverse-proxy
我对 nginx 还很陌生,我想完成这个任务。
我有两台服务器(server1 和 server2),server1 上有一个 sftp 服务器(bitvise)。在 server2 上我有一个正在运行的 nginx docker 容器。
我想配置 nginx,这样当流量到达端口 22 上的 server2 (带有 nginx 的那个)时,它会被重定向到 server1,我的 sftp 服务器所在的位置。
我有一个 dns“transfer.test.com”映射到我的 server2 公共 IP(已测试)。
这是我添加到 nginx conf 文件中的配置。
server {
listen 22;
server_name transfer.test.com;
return 301 https://google.com;
location / {
set $sftp server1-private-ip:22;
proxy_pass $sftp;
}
}
Run Code Online (Sandbox Code Playgroud)
server1-private-ip 是 server1(带有 sftp 的服务器)的私有 IP。
但到目前为止它还不起作用。我可以使用 server1 的私有 IP 使用 filezile 连接到 sftp,但是我无法使用 server2 的私有 IP 使用 filezila 连接到 sftp,这意味着流量没有被重定向。
感谢您的帮助。
如果你想使用 nginx 作为非 HTTP 协议(如 SSH 或 SFTP)的代理,你应该在流上下文中定义你的服务器,而不是http协议。典型的主配置文件(通常/etc/nginx/nginx.conf)看起来像
user <username>;
worker_processes <number>;
...
events {
worker_connections <number>;
}
http {
include /etc/nginx/mime.types;
... # other global http directives here
include /etc/nginx/conf.d/*.conf;
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,各个服务器(或服务器组)的配置文件包含在上下文中http。您应该将stream块添加到主配置文件中:
user <username>;
worker_processes <number>;
...
events {
worker_connections <number>;
}
http {
...
}
stream {
server {
listen 22;
proxy_pass <server1_private_ip>:22;
}
}
Run Code Online (Sandbox Code Playgroud)
在上下文中定义的块中,类似server_name或 的指令location是没有意义的。请注意,要使用上述配置,nginx 应编译有和模块。serverstreamngx_stream_core_modulengx_stream_proxy_module
| 归档时间: |
|
| 查看次数: |
1952 次 |
| 最近记录: |