V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Graves
V2EX  ›  Java

项目升级 https,但是静态资源还是走的 http

  •  
  •   Graves · 2019-11-19 10:41:12 +08:00 · 7209 次点击
    这是一个创建于 1839 天前的主题,其中的信息可能已经有所发展或是发生改变。
    项目是 struts2+jsp+jquery,不是前后分离的项目,现在部署了 nginx,配置好 ssl 和证书,可以正常访问,首页也出得来,但是 css 和 js 还是走的 http 协议,样式全部不见了
    location ^~/项目 / {
    proxy_pass http://localhost:8083/fire/;
    }
    proxy_pass 这样写有问题吗
    33 条回复    2019-11-20 17:55:40 +08:00
    NerverLibis
        1
    NerverLibis  
       2019-11-19 10:49:58 +08:00
    全站强制 https
    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" always;
    Graves
        2
    Graves  
    OP
       2019-11-19 10:50:24 +08:00
    难道只能全局把项目所有 http 替换成 https 吗(手动狗头)
    sleepm
        3
    sleepm  
       2019-11-19 10:50:26 +08:00
    前台 href="/static/css/tomorrow.css"
    明白不
    用相对路径
    Graves
        4
    Graves  
    OP
       2019-11-19 10:57:46 +08:00
    @sleepm 太难了,那么多个页面都要改,呜呜呜
    Graves
        5
    Graves  
    OP
       2019-11-19 10:59:54 +08:00
    <link href="themes/fire/css/common.css" rel="stylesheet" type="text/css" />
    这样引用有问题吗
    chuhemiao
        6
    chuhemiao  
       2019-11-19 11:09:09 +08:00
    直接目录也应该可以,如果你没有库里路径写死 要不就 ng 代理匹配下 http 路径
    atom234
        7
    atom234  
       2019-11-19 11:10:49 +08:00   ❤️ 5
    <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
    eason1874
        8
    eason1874  
       2019-11-19 11:23:18 +08:00
    @Graves #4 不难不难,程序没有模板就用 Nginx 的 sub_filter 一把梭,把绝对路径 HTTP 协议头全部替换成 HTTPS
    dixeran
        9
    dixeran  
       2019-11-19 11:25:13 +08:00 via Android
    服务器 rewrite
    iasuna
        10
    iasuna  
       2019-11-19 11:42:47 +08:00
    如果你要用 cloudflare rules 功能支持强制 https 如果你没用可能要手动配置了
    alexsunxl
        11
    alexsunxl  
       2019-11-19 11:44:18 +08:00   ❤️ 1
    @dixeran 这种 rewrite 是不行的。
    浏览器现在的策略默认你的 http 资源是没 rewrite 到 https, 直接给你报错
    具体点就是说, 浏览器判断你源页面是 https 的, 但引用 http 资源,就直接报安全错误了,都没到发资源请求那一步
    Graves
        12
    Graves  
    OP
       2019-11-19 11:46:57 +08:00   ❤️ 1
    @alexsunxl 是的,就是这样子,浏览器不支持 https 和 http 混合
    vultr
        13
    vultr  
       2019-11-19 11:47:47 +08:00
    @atom234 #7 已经给了你最简单的解决方案了,。
    caola
        14
    caola  
       2019-11-19 12:09:06 +08:00
    这么久才想着升级 https 么?
    我自己的网站早在 2014 就全站启用 https 了,当时还是用 @xoxo 的 5 年黑证书
    jinliming2
        15
    jinliming2  
       2019-11-19 12:14:47 +08:00 via iPhone
    必须全部改成 https:// 的,或者去掉 http: 改成 // 开头,如果是站内的地址就用相对地址。
    比如
    https://example.com/xxx/yyy
    //example.com/xxx/yyy
    /xxx/yyy
    scukmh
        16
    scukmh  
       2019-11-19 13:07:12 +08:00
    学一下全局替换,要多少事?
    muskill
        17
    muskill  
       2019-11-19 13:48:13 +08:00
    15 楼说的对.建议大家以后看见页面调站内地址写绝对地址的,拉出去揍一顿就好了,让他长长记性
    yazhouli01
        18
    yazhouli01  
       2019-11-19 16:30:18 +08:00
    资源路径都写的绝对路径吗?编辑器都有整个项目搜索替换的功能,你可以尝试下
    pmispig
        19
    pmispig  
       2019-11-19 16:45:59 +08:00
    谁写的绝对路径让谁改,很简单嘛
    Love4Taylor
        20
    Love4Taylor  
       2019-11-19 16:51:17 +08:00
    subs_filter 替换字符串啊
    shylockhg
        21
    shylockhg  
       2019-11-19 17:18:40 +08:00
    话说静态资源有加密的必要么。。。
    lands
        22
    lands  
       2019-11-19 17:19:44 +08:00
    @atom234 正解
    duan602728596
        24
    duan602728596  
       2019-11-19 18:48:02 +08:00 via iPhone
    所以说前后端分离的项目,编译时直接注入资源地址,就没这么多事了
    sobigfish
        25
    sobigfish  
       2019-11-19 19:32:36 +08:00
    @shylockhg 说这话是没体验过 被运营商各种插广告吧?
    sonicjam
        26
    sonicjam  
       2019-11-19 21:35:19 +08:00
    不能写个脚本替换吗?
    cydian
        27
    cydian  
       2019-11-20 00:11:34 +08:00 via Android
    @Graves 7 楼就是正解。直接在 header 加上就可以了。http header 或者 html meta 都有这个。 会直接把页面请求的 http 全部转成 https。
    cydian
        28
    cydian  
       2019-11-20 00:13:02 +08:00 via Android
    @Graves 7 楼那个方法 不需要你去替换 http 开头的连接。原本写死的链接用那个方法都会自动处理成 https
    注意,有该 header 的页面,所有资源都会走 https,无论内站还是外站域名,引用了就自动 https
    cydian
        29
    cydian  
       2019-11-20 00:14:50 +08:00 via Android
    popvlovs
        30
    popvlovs  
       2019-11-20 11:50:05 +08:00
    nginx 配置 http 301 到 https 也可以吧,这样也不用改前端代码
    server {
    listen 80 default_server;
    location / {
    return 301 https://$host$request_uri;
    }
    }
    Graves
        31
    Graves  
    OP
       2019-11-20 14:12:44 +08:00 via iPhone
    @popvlovs 不行的,首页是 https 但是页面引用的 http 资源,浏览器浏览器就报错,请求都发不出去
    popvlovs
        32
    popvlovs  
       2019-11-20 17:45:43 +08:00
    哦对的,https 里引 http 不符合浏览器安全策略
    popvlovs
        33
    popvlovs  
       2019-11-20 17:55:40 +08:00
    @Graves #1 楼的 hsts 方案有效么?那个好像也不用改代码
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2649 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 07:03 · PVG 15:03 · LAX 23:03 · JFK 02:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.