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

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

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