我需要调试在 nginx 反向代理后面运行的远程 java 应用程序。我收到以下错误:
无法连接到远程调试对象虚拟机。原因:java.io.IOException:收到无效握手
为了实现这一点,正确的 nginx 配置应该是什么?
我已通过直接定位应用程序的主机,成功将 vscode java 调试器附加到远程 java 应用程序。
解析器是 127.0.0.11 因为我使用的是 nginx docker 镜像。
我的 nginx 配置文件app.xyz.com.conf在 conf.d 中:
server {
listen 1043;
resolver 127.0.0.11 valid=30s;
server_name app.xyz.com;
include /etc/nginx/mime.types;
location / {
proxy_buffer_size 8k;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
set $upstream "http://java-app:1043";
proxy_pass $upstream;
client_max_body_size 10M;
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我遇到了以下问题,我希望能够从带有尾部斜杠和不带尾部斜杠的主网站访问代理传递的位置(托管 docker 容器中的 React/NextJs webApp)。
目前,当我点击:
http://my-website.com/test # 这有效
但当我击中时:
http://my-website.com/test/ # 失败并返回 404
我希望能够同时访问这两个网址。我缺少什么?
### Default Server ###
server {
listen 80;
root /usr/site;
if ($http_x_forwarded_proto = "http") {
return 301 https://$host$request_uri;
}
location ~/test(.*)$ {
set $upstream_endpoint http://$docker_container_url;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_pass $upstream_endpoint$1/;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 Socket.IO 在 Node.js 中开发一个应用程序,该应用程序使用 Docker Swarm 进行部署,并且我想要选择应用程序服务的多个实例。但是,当存在多个实例时,应用程序就会失败。该故障涉及浏览器中每个 Socket.IO 消息的错误、消息中应发送的数据从未到达等。
Docker Stack文件有四个服务
connect-redis,并用于socket.io-redis执行多节点 Socket.IO在 Socket.IO 中,有一个例行的 keepalive 请求,例如 GET 上的请求/socket.io/?EIO=3&transport=polling&t=NLjcKJj&sid=X5UnuTjlYNJ4N8OsAAAH。该请求可在反向代理的日志文件中看到,并由应用程序处理。Engine.IO 的调试输出表明它收到了这些请求。
具体来说:
2020-10-28T05:06:02.557Z Net read redis:6379 id 0
2020-10-28T05:06:02.557Z socket.io:socket socket connected - writing packet
2020-10-28T05:06:02.557Z socket.io:socket joining room X5UnuTjlYNJ4N8OsAAAH
2020-10-28T05:06:02.557Z socket.io:client writing packet {"type":0,"nsp":"/"}
2020-10-28T05:06:02.557Z socket.io:socket joined room [ 'X5UnuTjlYNJ4N8OsAAAH' ]
2020-10-28T05:06:02.656Z …Run Code Online (Sandbox Code Playgroud) 我对这些技术很陌生。
我的操作系统是 ubuntu-18.04,并使用 anaconda 创建一个虚拟环境,并通过 pip 安装和所有必要的软件包。我还安装了相同版本的 Chrome 和 chromedriver 来运行 selenium。我还在/etc/systemd/system下创建了一个test.service
我无法在 stackoverflow 中发布图片。该问题可以在屏幕截图中使用命令 ( )
看到sudo systemctl status test
Gunicorn[25770]:文件“/home/anaconda/port8788/hct/hct_information.py”,第21行,在testDriver中
gunicorn[25770]:driver.get(url)
gunicorn[25770]:文件“/home/chaoyang/anaconda3 /envs/selenium/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py”,第 333 行,在 get
Gunicorn[25770] 中:self.execute(Command.GET, {'url': url })
gunicorn[25770]:文件“/home/chaoyang/anaconda3/envs/selenium/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py”,第321行,执行
gunicorn[25770] :self.error_handler.check_response(响应)
gunicorn[25770]:文件“/home/chaoyang/anaconda3/envs/selenium/lib/python3.9/site-packages/selenium/webdriver/remote/errorhandler.py”,第242行,在 check_response
Gunicorn[25770] 中:引发异常类(消息、屏幕、堆栈跟踪)gunicorn[25770]:selenium.common.exceptions.WebDriverException:消息:未知错误:net::ERR_CONNECTION_RESET Gunicorn[25770]:(会话信息:无头镀铬=86.0.4240.183)
我的烧瓶代码如下:
import flask
from flask import request
import argparse
from hct import hct_information as hct
app = flask.Flask(__name__)
@app.route("/test")
def test():
return hct.testDriver('https://www.google.com/')
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0')
Run Code Online (Sandbox Code Playgroud)
我的硒代码如下:
from selenium import webdriver
from selenium.webdriver.chrome.options …Run Code Online (Sandbox Code Playgroud) python gunicorn selenium-webdriver nginx-reverse-proxy ubuntu-18.04
我们有一个要求,证书密钥只需要加载到 Nginx 内存中。也就是说,将其保存在本地 FS 中不是一个选项。此外,只有在主动查找证书密钥(使用证书向虚拟服务器发出请求)时,我们才需要证书密钥出现在 Nginx 内存中。当没有请求时,证书密钥应从内存中刷新,并通过客户端身份验证(Nginx 作为客户端向 KMS 进行身份验证)按需从 KMS(密钥管理服务器)重新加载。如果您对此类或类似的要求有深入了解,请提供指示。
我在这个 Nginx博客中提到了最佳实践。然而,并非我们的所有要求都得到满足。有几个问题:
我正在尝试设置一个 Nginx,我想在其中将两个数字相加。
server {
server_name "~^pr-(\d*).review-apps.example.com$";
location / {
set $port 50000+$1;
proxy_pass "http://localhost:$port/test";
}
}
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。(结果为字符串形式。例如“50000+125”)
如何在 nginx.conf 中添加两个数字?有可能吗?
我正在尝试让 nginx 代理管理器(在 docker 容器中运行)连接到另一个打开了端口 8080 的 docker 容器。当我设置代理连接到192.168.0.29:8080主机的IP地址,但它不起作用时,浏览器只是说该站点没有发送任何数据。
我尝试使用其他服务(不在 docker 容器内运行)设置反向代理,它们工作完美。所以,我得出的结论是,问题出在 docker 容器上。
首先,我尝试用容器的地址(显示在 portainer 中)替换 ip 地址,该地址显示为172.17.0.2. 但是,那没有用。我可以确认两个容器都在同一个网络中bridge。
我在这里、Stack Overflow 或其他地方都找不到这个问题的任何解决方案。希望有足够的数据来解决这个问题。提前致谢!
编辑:arp -na从容器内
运行会给出以下输出:
[root@docker-00244f7ab2cc:/app]# arp -na
? (172.17.0.1) at 02:42:d1:fc:fc:6b [ether] on eth0
Run Code Online (Sandbox Code Playgroud) 有人熟悉 nginx 吗?我试图在流块中以有条件的方式启用 proxy_protocol,即对于某些端点,我希望添加代理协议标头。对于其他人我不想添加它。查看文档,proxy_protocol 无法获取变量(尝试了 map 指令) 关于如何实现此目的有什么建议吗?在这里添加了我的 nginx 配置。 http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_protocol
这是有问题的部分proxy_protocol $proxy_state;
map $ssl_preread_server_name $proxy_state{
default on;
facebook.com off;
}
server {
listen 8443 ;
resolver 8.8.8.8 ipv6=off;
proxy_pass $server;
proxy_protocol $proxy_state;
ssl_preread on;
}
Run Code Online (Sandbox Code Playgroud)
以下是完整的配置
error_log logs/error.log;
events {
}
stream {
map $ssl_preread_server_name $server {
# default 127.0.0.1:8080;
default unix:/var/run/nginx.sock;
include /home/user/allow_url_list;
}
map $ssl_preread_server_name $proxy_state{
default on;
facebook.com off;
}
server {
listen 8443 ;
resolver 8.8.8.8 ipv6=off;
proxy_pass $server;
proxy_protocol $proxy_state;
ssl_preread on;
} …Run Code Online (Sandbox Code Playgroud) 我想使用 docker 来容器化 nginx、fastapi 和 2 个 Streamlit 应用程序。所有 3 个应用程序(fastapi、2streamlit 应用程序)不会相互交互。Nginx 应该作为这 3 个应用程序的反向代理。对于 fastapi 来说它正在工作。我可以将rest-api请求发送到http://ip:80/twxservices。“twxservices”作为端点添加到 app.py 文件中,而不是添加到 nginxconfig 中。
无法通过 http://ip:80/stream1 和 http://ip:80/stream2 访问 Streamlit 应用程序 我收到错误:404:未找到
在此先感谢您的帮助。在下面找到文件结构和配置文件。这是文件结构以及反向代理应该如何工作:
docker-compose 文件:
services:
web:
build:
context: ./nginxfolder
dockerfile: Dockerfile
container_name: web
ports:
- 80:80
networks:
- my-network
depends_on:
- app
app:
build:
context: ./twxservicesfolder
dockerfile: Dockerfile
container_name: app
networks:
- my-network
spectrum:
build:
context: ./spectrumfolder
dockerfile: Dockerfile
container_name: spectrum
networks:
- my-network
dgraph:
build:
context: ./dgraphfolder
dockerfile: Dockerfile
container_name: dgraph …Run Code Online (Sandbox Code Playgroud) 我在 docker 环境中使用 gitea 版本控制系统。使用的gitea是无根类型的镜像。
\nhttp 端口映射为 \xe2\x80\x9c8084:3000\xe2\x80\x9d,ssh 端口映射为 \xe2\x80\x9c2224:2222\xe2\x80\x9d。
\n我在 Linux 主机上生成了密钥,并将生成的公钥添加到了我的 Gitea 帐户中。
\n1.测试环境
\n后来我创建了 ssh 配置文件nano /home/campos/.ssh/config :
Host localhost\n HostName localhost\n User git\n Port 2224\n IdentityFile ~/.ssh/id_rsa\nRun Code Online (Sandbox Code Playgroud)\n完成设置后,我创建了 myRepo 存储库并克隆了它。
\n为了执行克隆,我将 url 从 更改ssh://git@localhost:2224/campos/myRepo.git为git@localhost:/campos/myRepo.git
要克隆存储库,我输入:git clone git@localhost:/campos/myRepo.git
这很完美!
\n2.生产环境
\n但是,在定义反向代理和域名时,无法克隆存储库。
\n在执行克隆之前,我更改了ssh配置文件:
\nHost gitea.domain.com\n HostName gitea.domain.com\n User git\n Port 2224\n IdentityFile ~/.ssh/id_rsa\nRun Code Online (Sandbox Code Playgroud)\n然后我再次尝试克隆存储库:
\ngit clone git@gitea.domain.com:/campos/myRepo.git
nginx ×6
docker ×2
nginx-config ×2
python ×2
docker-swarm ×1
fastapi ×1
gitea ×1
gunicorn ×1
java ×1
jdwp ×1
socket.io ×1
streamlit ×1
traefik ×1
ubuntu-18.04 ×1