我一直试图设置nginx作为docker的代理。 我有一台运行Ubuntu服务器的笔记本电脑。 现在我在localhost:8080上运行docker,并在http://192.168.1.5:8080/my-webapp-0.1.0-standalone/上为应用程序的主页提供服务。
我这样configurationnginx( 我是从这个页面改编的 ):
server { listen 80; server_name nomilkfor.me; rewrite ^(.+?)/?$ http://nomilkfor.me$1 permanent; } server { listen 80; server_name www.nomilkfor.me; root /usr/share/nginx/html; location / { try_files $uri @my-webapp; } location @my-webapp { proxy_pass http://localhost:8080; } }
我可以从我的家庭networking连接到nginx,并看到nginx欢迎屏幕。
我也试过$ sudo netstat -tanpl|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3264/nginx: worker
我看到nginx正在端口80上听。
但是当我尝试加载nomilkfor.me我得到“Chrome无法连接到nomilkfor.me”的错误。
我究竟做错了什么?
编辑
我创build了一个非常简单的configuration,而且这个服务器通过jetty服务于/usr/share/nginx/的index.html ,而不是app。
server { listen 80; server_name nomilkfor.me; # access_log /var/log/nginx/localhost.access.log; location / { proxy_pass http://127.0.0.1:8080; } location /html { root /usr/share/nginx/; } }
编辑2
看来,nginx使用另一个conf文件比我想象的。 我在conf文件/etc/nginx/sites-available/nomilkfor.me添加了一个拼写错误(我删除了一个大括号),然后运行$ nginx -s reload ,它编译时没有错误,并在浏览器上显示了nginx的初始页面。 那里可以有另一个conf文件吗? 有没有办法find哪个conf文件nginx使用?
编辑3
根据Pazis的评论,我添加了root但并不确定究竟应该在哪里,或者应该是什么。 我添加了一些build议。 哪一个是正确的? /usr/share/nginx/html是我有index.html 。
server { listen 80; server_name nomilkfor.me; # root /home/z/jetty/jetty-dist/webapps root /usr/share/nginx/html; location / { proxy_pass http://127.0.0.1:8080; } #location /html { # root /usr/share/nginx/; } }
编辑4
这是我的dockerconf文件。 它在/home/z/jetty/jetty-dist/jetty-distribution-9.1.0.v20131115/demo-base/webapps/my-webapp.xml
<Configure class="org.eclipse.jetty.webapp.WebAppContext"> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <!-- Required minimal context configuration : --> <!-- + contextPath --> <!-- + war OR resourceBase --> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <Set name="contextPath">/test</Set> <Set name="war"><Property name="jetty.webapps" default="."/>/my-webapp-0.1.0-standalone.war</Set>
你可以尝试以下步骤吗?
确保父nginx目录中的nginx.conf文件的include指令指向站点可用目录中的默认文件
如果您需要代理另一个服务(例如,docker),请使用上面的选项(在sites-available / default文件中),如下所示。 您可以参考服务器部分的上游。
一旦你的基本configuration工作,你可以检查重写选项,是否需要做任何事情的主机名。 希望能帮助到你。
Nginx.conf:
include /etc/nginx/sites-enabled/*;
在sites-available目录(默认文件)中:
upstream nomilkforme { server 0.0.0.0:8080; ##nomilkforme running on 0.0.0.0:8080; keepalive 500; } server { listen 80; server_name localhost; #access_log logs/host.access.log main; location / { proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_set_header X-Nginx-Proxy true; proxy_set_header Connection ""; proxy_http_version 1.1; proxy_pass http://nomilkforme }
另外,可以检查nginx conf文件(在重新加载/重新启动之前),如下所示: nginx -t -c /etc/nginx/nginx.conf
更新:你可以检查docker是否运行在0.0.0.0:8080当你尝试的Nginxconfiguration(也许确认使用netstat)。 另外,当您通过浏览器访问URL时,是否可以共享来自nginx的访问/错误日志?