我的个人网站由来,以及部署时遇到的问题!

本贴最后更新于 3137 天前,其中的信息可能已经水流花落

刚开始工作的时候,我的学习工作笔记是记在本子上的,然后移到有道云笔记,大概在第二年的时候转移到CSDN博客,在那上面开始我的技术博客生涯。

一些知识点太久不用就会忘记,在博客上写下来,也是一个很不错的知识整理,还能给别人提供帮助。

 

工作以来就一直希望能有自己的网站,刚开始是因为技术水平不够,不知道如何下手,后来水平够了,我对搭建自己的个人网站又没有之前那么的有热情了

自己写一个吧,还是要花点时间,其实我还是太懒了,这事就一直这么耽搁下来了。

 

直到前两天,不知怎么就看到了丁亮的博客,被他首页GitHub 上 Star 数最多的 Java 博客 Solo  给吸引了,从github上把solo的代码拉下来,本地部署一跑,

这不正是我需要的功能嘛,完全覆盖我的需求,花一天时间测试以后,我搭建自己博客的热情又燃烧起来了,说干就干,域名早就买好放在那半年了,先借用公司的

服务器,部署上线。

 

谁想部署到服务器后测试出问题了,我采用的是nginx+tomcat的集群部署方案,部署到服务器后,测试发现有功能的请求链接403了,删除功能、编辑功能都不能用,

想看日志,发现solo的日志只配置了在控制台输出,太不科学了,算了后面再给他加上log文件输出,先从tomcat的日志里看,发现程序并没有报错,那就只能看代码了,

找到删除的请求目标执行方法,代码如下

 

 /**
     * Removes an article by the specified request.
     *
     * <p>
     * Renders the response with a json object, for example,
     * <pre>
     * {
     *     "sc": boolean,
     *     "msg": ""
     * }
     * </pre>
     * </p>
     *
     * @param context the specified http request context
     * @param request the specified http servlet request
     * @param response the specified http servlet response
     * @param articleId the specified article id
     * @throws Exception exception
     */
    @RequestProcessing(value = "/console/article/{articleId}", method = HTTPRequestMethod.DELETE)
    public void removeArticle(final HTTPRequestContext context, final HttpServletRequest request, final HttpServletResponse response,
        final String articleId) throws Exception {
        if (!userQueryService.isLoggedIn(request, response)) {
            response.sendError(HttpServletResponse.SC_FORBIDDEN);
            return;
        }
    final JSONRenderer renderer = new JSONRenderer();

    context.setRenderer(renderer);

    final JSONObject ret = new JSONObject();

    renderer.setJSONObject(ret);

    try {
        if (!articleQueryService.canAccessArticle(articleId, request)) {
            ret.put(Keys.STATUS_CODE, false);
            ret.put(Keys.MSG, langPropsService.get("forbiddenLabel"));

            return;
        }

        articleMgmtService.removeArticle(articleId);

        ret.put(Keys.STATUS_CODE, true);
        ret.put(Keys.MSG, langPropsService.get("removeSuccLabel"));
    } catch (final Exception e) {
        LOGGER.log(Level.ERROR, e.getMessage(), e);

        final JSONObject jsonObject = new JSONObject();

        renderer.setJSONObject(jsonObject);
        jsonObject.put(Keys.STATUS_CODE, false);
        jsonObject.put(Keys.MSG, langPropsService.get("removeFailLabel"));
    }
}

在方法体开头的时候(userQueryService.isLoggedIn(request, response))做了登录验证,这里再吐下槽,登录验证不应该提取出来么,在每个方法中都写一遍我也是醉了,

这里最有可能返回403,果断加log,看是否是因为session丢失导致的通不过登录验证,最后发现请求根本没有进入到这个方法里面来,而是在这之前就被拦截了,但是solo的权限过滤器

并没有拦截删除请求,那就只有org.b3log.latke.servlet.DispatcherServlet这个solo使用的开源框架latke有可能了,但是这是框架的控制器,不太可能做这事啊,因为框架本地测试

是没有问题的,那我只能怀疑是nginx+tomcat的问题了,于是我绕过nginx,直接访问tomcat的端口,测试居然通过了,没有再报403,那就是nginx的问题了,仔细一看nginx的配置

并没有发现什么问题,之前其他的项目都是这么配置的啊,难道是latke框架不支持?觉得不应该啊,只能继续用排除法了,将nginx最有可能的请求过滤注释掉,如下代码

upstream wanglei_xxxxx {
	server 127.0.0.1:xxxxx;
}
server {
	listen       80 ;
	server_name  wanglei0622.cn www.wanglei0622.cn;
	#注释掉下面的请求类型过滤
       #if ($request_method !~* GET|HEAD|POST) {
	#   return 403;
	#}
	rewrite ^(.*)\;jsessionid=(.*)$  $1   break;
	location ~ ^/(WEB-INF)/ {
		deny all;
	}
	location ~ \.(gif|jpg|jpeg|png|ico|rar|css|js|zip|txt|flv|swf|doc|ppt|xls|pdf)$ {
		 root /data/xxxxx;
		 access_log off;
		 expires 24h;
	}
	location / {
		proxy_pass http://wanglei_xxxxx;
		proxy_redirect          off;
		proxy_set_header        Host $host;
		proxy_set_header        X-Real-IP $remote_addr;
		proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
		client_max_body_size    10m;
		client_body_buffer_size 128k;
		proxy_connect_timeout   300;
		proxy_send_timeout      300;
		proxy_read_timeout      300;
		proxy_buffer_size       4k;
		proxy_buffers           4 32k;
		proxy_busy_buffers_size 64k;
		proxy_temp_file_write_size 64k;
	}
}
然后一看页面删除操作的JS代码,如下
/**
     * @description 删除文章
     * @param {String} id 文章 id
     * @param {String} fromId 文章来自草稿夹(draft)/文件夹(article)
     * @param {String} title 文章标题
     */
    del: function (id, fromId, title) {
        var isDelete = confirm(Label.confirmRemoveLabel + Label.articleLabel + '"' + title + '"?');
        if (isDelete) {
            $("#loadMsg").text(Label.loadingLabel);
            $("#tipMsg").text("");
        $.ajax({
            url: latkeConfig.servePath + "/console/article/" + id,
            type: "DELETE",
            cache: false,
            success: function (result, textStatus) {
                $("#tipMsg").text(result.msg);
                if (!result.sc) {
                    $("#loadMsg").text("");
                    return;
                }

                admin[fromId + "List"].getList(1);
            }
        });
    }
}<br /><br />请求类型居然是 type: "DELETE"  ,我也是醉了,哪位前端大神写的,不走寻常路啊!真是够坑的,幸亏我找BUG经验丰富,二分法快速定位问题位置,排除法确定问题。太有成就感了!<br />接下来就等域名备案通过了!</pre>
  • AJAX
    26 引用 • 96 回帖
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • zempty

    好文章。趁火前留名!

  • zempty

    撸猪的意思是,登录判断应该放在 filter 里是啵儿?

  • zempty

    这位前端大神写的。@Vanessa

  • someone

    会火么[em09],谢谢捧场

  • zempty

    @Default Commenter 会啊。你咋是 default commenter?

  • zonghua

    solo 还不是一般复杂啊

  • 88250

    多谢博主的支持,Solo 代码确实比较恶心,欢迎 PR 进行改进~

    @zonghua @zempty [Solo] 不是复杂,是前期没有设计好,后期改不动的典型项目。

  • @zempty 他是从博客那边同步过来的

  • someone

    你们从哪看到我的文章的啊,我昨天才发上线啊,文章有同步到社区?[em09]

  • 88250

    @wanglei0622 是的,社区这边看到的。默认 [Solo] 的文章都会同步到社区,具体可以看这里 https://hacpai.com/b3log

  • wanglei0622
    作者

    @zempty 是的呀,不过 solo 的 dao 层写的有点复杂,刚刚看了下应该是可以的,调用 org.b3log.latke.repository.jdbc.util.Connections 从连接池中拿一个出来在 filter 操作就行了,还没测试不知道可行不

  • zempty

    @wanglei0622 不暴露一下博客地址让大家一起玩玩么?

  • someone

    域名备案还没有通过啊,下周应该就可以了

  • someone

    sdfsdf

  • someone

    不要刷评论哦

  • someone

    啊啊啊啊

  • someone

    我删评论了啊

  • ss 1

    @88250 Starting cgconfig service: Error: cannot mount cpuset to /cgroup/cpuset: Invalid argument
    /sbin/cgconfigparser; error loading /etc/cgconfig.conf: Cgroup mounting failed
    Failed to parse /etc/cgconfig.conf or /etc/cgconfig.d [FAILED]

    老大 docker 遇见这个错误,是内核问题?vps

  • 从协议标准来说,确实应该用 delete 的,只不过现在人开发基本都不这么用而已~~~楼主也别惊讶了,这位前端只能说是很专业!

  • ss

    啊,老大,你看那种情况是内核问题还是?centos6 2.6.32-042stab113.11 ,不知道你部署在什么机器上? @88250

  • someone

    [em02]我就是觉得他太专业了,我根本想不到会这么用!

  • someone

    磊兄,已经添加好你的链接啦!

  • someone

    龚兄我也加了,你看名字可以不

  • someone

    改成我的博客名:家桥乱弹琴

  • someone

    早点改,我在健身房

  • someone

    晚点[em05]

  • someone

    磊兄 麻烦把友链“家桥乱弹琴”改为“不只是照明”。 我之前博客内容是大杂烩,现在想转向为工作方面的内容(也就是灯饰设计相关)。 多谢啦!

  • someone

    个人建站,可以遇到各种乱七八糟问题

请输入回帖内容 ...

推荐标签 标签

  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 5 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 699 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 73 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    166 引用 • 595 回帖 • 1 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 94 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 536 关注
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖 • 1 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 52 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 633 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖 • 1 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖 • 1 关注
  • 996
    13 引用 • 200 回帖 • 6 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 391 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 723 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖 • 2 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 67 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 132 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 1 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1705 回帖
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    107 引用 • 295 回帖
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    491 引用 • 917 回帖 • 2 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 629 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 73 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 334 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 659 关注