部署在Nginx子路由中时,路由跳转问题
Closed this issue · 4 comments
tomriddle1234 commented
你好我现学了Maven,实现了您的代码的部署,不过我发现一个部署问题。
当我部署在已有域名的子路由中时,访问会出现问题,比如test.org/shms
这样访问,地址会跳转test.org/Login......
,这样就会404。
然而部署在单独域名中则没问题。
请问是不是代码编写时仅考虑域名部署的情况?如果可以设置网站访问地址,在哪个文件中设置?
Tomcat设置:
<Service name="HomeworkSHMS">
<Connector port="2011" protocol="HTTP/1.1"
connectionTimeout="20000"
maxThreads="3000"
minSpareThreads="250"
acceptCount="2000"
enableLookups="false"
compression="on"
URIEncoding="UTF-8"
compressionMinSize="2048"
noCompressionUserAgents="gozilla,traviata"
compressableMimeType="text/html,text/xml,text/css,text/plain,text/javascript,application/x-javascript,application/javascript"
/>
<Engine name="HomeworkSHMSEngine" defaultHost="localhost">
<Host
name="localhost"
appBase="webapps"
unpackWARs="true"
autoDeploy="true"
xmlValidation="false"
xmlNamespaceAware="false">
<Context
path="/"
docBase="/data/htdocs/shms"
allowLinking="true"
reloadable="false"
privileged="true" >
</Context>
</Host>
</Engine>
</Service>
Nginx 设置(跳转问题):
upstream otherweb {
server 127.0.0.1:1011;
}
upstream homeworkweb {
server 127.0.0.1:2011;
}
server {
listen 443 ssl;
server_name test.org;
#证书(公钥.发送到客户端的)
ssl_certificate /home/test/test/full_chain.pem;
#私钥
ssl_certificate_key /home/test/test/private.key;
location ^~ /shms/ {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_redirect off;
session_sticky_hide_cookie upstream=homeworkweb;
proxy_pass http://homeworkweb;
}
location ~* \.(html|htm|shtml|zip|rar|doc|docx|xls|xlsx|ppt|ppts|gif|jpg|jpeg|png|bmp|swf|ico|js|css)$ {
root /data/htdocs/otherweb ;
}
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_redirect off;
session_sticky_hide_cookie upstream=otherweb ;
proxy_pass http://otherweb ;
}
access_log off;
}
Nginx 设置(无问题):
server {
listen 80;
server_name shms.vimooc.org;
location ~* \.(html|htm|shtml|zip|rar|doc|docx|xls|xlsx|ppt|ppts|gif|jpg|jpeg|png|bmp|swf|ico|js|css)$ {
root /data/htdocs/shms;
}
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_redirect off;
session_sticky_hide_cookie upstream=homeworkweb;
proxy_pass http://homeworkweb;
}
access_log off;
}
itning commented
直接部署是没有问题的。
nginx反向代理 在这个APP上没有部署过。
我刚才试了下,在没有使用nginx代理的情况下,子域名可以正常使用。
不建议使用 nginx子域名,你可以直接使用tomcat监听某端口,webapps目录下即子域名。
itning commented
折中办法:
server {
listen 80;
server_name localhost;
location /a {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://localhost:8080/a/;
}
}
项目部署路径 http://localhost:8080/a/
nginx访问路径 http://localhost/a
tomriddle1234 commented
我想用您的系统作为我的公益网站vimooc.org实现作业部分功能,所以希望作为子域名或者子路由访问。
如果这用目录的话,需要把mvn生成的代码copy到我原来站点的docBase下面作为一个子目录?
我感觉子路由不行也可能是我上面nginx写的不对。
itning commented
我想用您的系统作为我的公益网站vimooc.org实现作业部分功能,所以希望作为子域名或者子路由访问。
如果这用目录的话,需要把mvn生成的代码copy到我原来站点的docBase下面作为一个子目录?
我感觉子路由不行也可能是我上面nginx写的不对。
折中方法 就可以使用 nginx 子路径访问