我一直在尝试将 nginx 设置为 jetty 的代理。我有一台运行 ubuntu 服务器的笔记本电脑。现在我让 jetty 在 localhost:8080 上工作,它为 上的应用程序提供主页http://192.168.1.5:8080/my-webapp-0.1.0-standalone/
。
我像这样配置了 nginx(我从这个页面改编而来):
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;
}
}
我可以从我的家庭网络连接到 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”错误。
我究竟做错了什么?
编辑
我创建了一个非常简单的配置,这个配置也是通过 jetty 来为应用程序index.html
提供服务:/usr/share/nginx/
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 文件吗?有没有办法找到 nginx 正在使用的 conf 文件?
编辑3
按照Pazis 评论我添加了,root
但不确定它应该在哪里或应该是什么。我添加了一些建议。哪一个是正确的?/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
这是我的 jetty conf 文件。它位于/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>
答案1
您可以尝试以下步骤吗?
确保父 nginx 目录中的 nginx.conf 文件具有指向 sites-available 目录中的默认文件的 include 指令
如果您需要代理到其他服务(例如 jetty),请使用下面共享的上游选项(在 sites-available/default 文件中)。您可以参考服务器部分的上游。
一旦基本配置工作正常,您就可以检查重写选项以及是否需要对主机名进行任何操作。希望对您有所帮助。
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
更新: 当您尝试 nginx 配置时,您可以检查 jetty 是否在 0.0.0.0:8080 上运行(也许可以使用 netstat 确认)。此外,当您通过浏览器访问 URL 时,您可以分享来自 nginx 的访问/错误日志吗?