我的Spring Boot API有问题,我将它与Docker和Nginx一起用作反向代理。
目前,我正在与一个REST web服务一起build立一个网站。 Web服务器和REST Web服务(Spring Boot)在两个不同的Docker容器中运行。 为了提供HTTPS(encryption),我使用NGINX作为反向代理(也作为Docker-Container运行)。
现在我在我的nginx.conf使用以下设置来启用外部访问我的Spring API。
upstream spring-backend { server spring:8081; } # ... some other configuration stuff server { listen 7332; ssl on; # ... ssl-config # all other traffic location / { # Specify the fields added/redefined to the request header passed to the proxied server. proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; # Timeout for reading a response from the proxied server. proxy_read_timeout 3600; # keep open even without any transmission proxy_pass http://spring-backend; } }
虽然这个效果很好,但我遇到了Spring为创build的实体创buildAPI URI的问题,如下所示: http://spring-backend/{entity}/{id} 。
这显然不能从另一台使用该网站的计算机访问,并且它是关联的webservice。 相反,我需要的条目是https://{the-url-of-the-webserive}:7332/{entity}/{id} 。
然而,我不确定是否有可能从名称parsingNGINX使用(因为它应该取代server-backend与spring:8081 )和Docker(至less应该取代spring部分的实际地址)。
其实这可以通过添加X-Forward-*标头到server的location部分来解决。
这应该比看起来如下:
location / { # Specify the fields added/redefined to the request header passed to the proxied server. proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; #--------------------------------- SOLUTION ------------------------------------------- proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host:443; #or $host:7332 in my case proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-Port 443; #or 7332 in my case proxy_set_header X-Forwarded-Proto https; #------------------------------- SOLUTION-END ----------------------------------------- # Timeout for reading a response from the proxied server. proxy_read_timeout 3600; # keep open even without any transmission proxy_pass http://spring-backend; }
该代码片段取自plone.lucidsolutions.co.nz ,您也可以在这里find有关此解决scheme的更多信息。