为了学习nginx,我创建了2个Java Web应用程序。
目前,通过修改var player;
var box_tnt;
function create (){
this.physics.add.collider(player, box_tnt, hitTnt, null, this);
}
//the function hitTnt stop the game because the player died
function hitTnt (player, boxes){
this.physics.pause();
player.setTint(0xff0000);
player.anims.play('default');
gameOver = true;
textGameOver.setText('GAME OVER');
}
文件,可以在点击localhost
时将其路由到我的一个Web应用程序。
在我的应用程序中,有一个nginx.conf
链接。点击后,我试图路由到我的第二个Web应用程序。我该如何实现?
我的click here
服务器指令代码段-:
nginx.conf
第一台服务器在 server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://127.0.0.1:8081/Hello_World/;
}
location /saytime {
root html;
index index.html index.htm;
proxy_pass http://127.0.0.1:8080/FirstServletProject/FirstServlet/;
}
上运行
第二台服务器正在http://127.0.0.1:8081/Hello_World/
上运行
我的Hello_World http://127.0.0.1:8080/FirstServletProject/FirstServlet/
文件-:
index.html
我的Hello_World servlet-:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<a href="saytime">Click Here</a>
</body>
</html>
即使点击链接package com.example.helloworld;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class HelloWorldServlet
*/
@WebServlet("/saytime")
public class HelloWorldServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloWorldServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.print("<html><body><h1 align='center'>" +
new Date().toString() + "</h1></body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
,它也不会转发到该应用。
根据Victor的答案更改后进行更新-
获取http://localhost/saytime
HTTP Status 404 – Not Found
答案 0 :(得分:1)
因此,当用户单击HTML <a>
链接时,您的 HelloWorld 服务器必须重定向到 FirstServletProject 服务器。
这里有一些问题:
您的/saytime
控制器与索引位于同一服务器中。因此它将永远无法在另一个应用程序中处理请求。
如果将控制器移至 FirstServletProject ,则可以进行重定向,但仍必须将指定的<a>
链接从相对路径更改为索引的服务器<a href="saytime">
到绝对路径<a href="http://localhost:80/saytime"
如果您要使用Nginx服务进行重定向,则不需要@WebServlet("/saytime")
批注。您已经告诉Nginx,当他在 / saytime 上收到请求时,应该将其重定向到http://127.0.0.1:8080/FirstServletProject/FirstServlet/
还可以查看Nginx服务。有时,配置错误导致服务无法启动。使用systemctl status nginx
来查看它是否正在运行。如果不是使用journalctl -e
来调试错误。
与OP讨论后,提供的解决方案均无效。
尝试在Nginx conf中创建另一个服务器块(与默认服务器块不同),并为每个服务器创建上游块:
server {
listen 8082;
location / {
proxy_pass http://helloworld;
}
location /saytime/ {
proxy_pass http://firstservlet;
}
}
upstream helloworld {
server http://127.0.0.1:8081/;
}
upstream firstserver {
server http://127.0.0.1:8080/;
}
我认为您应该取消注释@WebServlet("/saytime")
注释。