itning/Student-Homework-Management-System

部署在Nginx子路由中时,路由跳转问题

Closed this issue · 4 comments

你好我现学了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;

}

直接部署是没有问题的。
nginx反向代理 在这个APP上没有部署过。
我刚才试了下,在没有使用nginx代理的情况下,子域名可以正常使用。

不建议使用 nginx子域名,你可以直接使用tomcat监听某端口,webapps目录下即子域名。

折中办法:

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

我想用您的系统作为我的公益网站vimooc.org实现作业部分功能,所以希望作为子域名或者子路由访问。

如果这用目录的话,需要把mvn生成的代码copy到我原来站点的docBase下面作为一个子目录?

我感觉子路由不行也可能是我上面nginx写的不对。

我想用您的系统作为我的公益网站vimooc.org实现作业部分功能,所以希望作为子域名或者子路由访问。

如果这用目录的话,需要把mvn生成的代码copy到我原来站点的docBase下面作为一个子目录?

我感觉子路由不行也可能是我上面nginx写的不对。

折中方法 就可以使用 nginx 子路径访问