V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
AirSc
V2EX  ›  问与答

Ghost Blog 1.0.0 在 Server 端安装好后使用 NGINX 进行反代但是 url 依旧是 localhost,如何解决

  •  
  •   AirSc · Jun 16, 2017 · 4262 views
    This topic created in 3242 days ago, the information mentioned may be changed or developed.
    本地装好后地址是 localhost:2369,但是反代在域名上后,它依旧是本地配置,导致部分链接无法访问。

    看到 1.0 好像还是 Beta 版,所以就没有 config.js。

    如何解决?
    Supplement 1  ·  Jun 17, 2017
    比如说: https://www.airscr.com/ Logo 处和分享的时候,url 都是 127.0.0.1
    Supplement 2  ·  Jun 17, 2017

    解决方法, NGINX 中 location ^~ / {

    proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header    Host              $http_host;
    proxy_set_header    X-Forwarded-Proto $scheme;
    
    proxy_pass http://127.0.0.1:2369;
    
    26 replies    2017-06-17 18:44:08 +08:00
    xratzh
        1
    xratzh  
       Jun 16, 2017 via iPhone
    没看懂?什么链接无法访问?
    AirSc
        2
    AirSc  
    OP
       Jun 16, 2017
    @xratzh 在服务器上面搭了一个 Ghost,使用 localhost 的域名,然后利用 Nginx 反代之后,内容当然显示的还是 localhost 的,但是找不到地方把用户访问的 localhost 替换成域名
    xratzh
        3
    xratzh  
       Jun 16, 2017 via iPhone
    @AirSc 不懂,不过我写了一件脚本,你可以看看我的 github。
    tayuo
        4
    tayuo  
       Jun 16, 2017 via iPhone
    Ghost 1.0.0 推荐使用 Ghost-CLI 进行部署

    可以自动生成配置文件
    AirSc
        5
    AirSc  
    OP
       Jun 17, 2017
    @tayuo 对,部署的时候填的 URL 不是 localhost 么?需要用 nginx 反代才可以给用户看。但是反代之后所有的链接都还是 localhost 的。
    AirSc
        6
    AirSc  
    OP
       Jun 17, 2017
    @tayuo 比如,我在 config.production.json "url"改成了我的域名,使用反代,反代 localhost:2369,就会导致 redirected you too many times. 的错误。

    Nginx 里是这样配置的:

    location ^~ / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;


    proxy_pass http://127.0.0.1:2369;
    proxy_redirect off;
    }
    AirSc
        7
    AirSc  
    OP
       Jun 17, 2017
    @tayuo 比如说: https://www.airscr.com/ Logo 处和分享的时候,url 都是 127.0.0.1
    xratzh
        8
    xratzh  
       Jun 17, 2017 via iPhone
    你在 ghost 后台设置用户的主页信息试试?
    xratzh
        9
    xratzh  
       Jun 17, 2017 via iPhone
    @xratzh 换个 theme 试试,感觉是 theme 的锅
    AirSc
        10
    AirSc  
    OP
       Jun 17, 2017
    @xratzh 没有用,使用的是默认的主题
    AirSc
        11
    AirSc  
    OP
       Jun 17, 2017
    @xratzh 我还是直接替换主题里的链接好了- -
    chinni
        12
    chinni  
       Jun 17, 2017
    你需要给 nginx 编译一个 subs_filter 模块 替换下字符串
    stillness
        13
    stillness  
       Jun 17, 2017 via Android
    没配置 ghost 的 url 吧. 默认是不是没有 config.js, 有个 config.example.js
    GoBeyond
        14
    GoBeyond  
       Jun 17, 2017 via Android
    你配置文件有问题吧
    indust
        15
    indust  
       Jun 17, 2017
    1.0 版的配置文件是 config.production.json
    AirSc
        16
    AirSc  
    OP
       Jun 17, 2017 via Android
    @chinni 目前我的思路就是这个。


    @nirocfz
    @GoBeyond
    @indust 但是怎样设置用户得到的是正确域名。
    AirSc
        17
    AirSc  
    OP
       Jun 17, 2017 via Android
    @indust 在 0.x 的版本里,有个 production URL 可以使输出的链接自定义,但是在 1.0 里面的 config.production.json 却没有这个功能
    tayuo
        18
    tayuo  
       Jun 17, 2017 via iPhone
    在用 Ghost-CLI 进行 ghost setup 的时候

    第一项填写网址的时候填 http://domain

    不需要填写 127.0.0.1:2368
    stillness
        19
    stillness  
       Jun 17, 2017 via Android
    @AirSc 看看有什么配置选项,文件里没有,自己可以加上,url 这个配置是文档里的第一个配置项项啊。自己不告诉 ghost 生成的页面里 url 是什么,当然页面上不是域名。先生成了页面,再通过前面做反代的 nginx 修改页面内容,能起作用,并不合理
    https://docs.ghost.org/v1.0.0/docs/configuring-ghost
    Hardrain
        20
    Hardrain  
       Jun 17, 2017
    关于域名是 localhost 的问题:

    检查一下 config.js 中的 url:'https://yourdomain.tld'
    这个地方填的是不是你的域名而非 localhost
    Hardrain
        21
    Hardrain  
       Jun 17, 2017
    @AirSc 关于这个重定向循环,并且你使用了 https,你需要让 Ghost(Node 后端知道浏览器在用 https 访问前端,也就是 Nginx)

    前端(反代,Nginx,apache httpd...)需要向后端 Pass 一个 Request Header
    X-Forwarded-Proto:https

    For Nginx:
    server {
    listen 443 ssl http2;
    server_name yourdomain.tld;
    ssl on;

    location / {
    proxy_pass http://127.0.0.1:2369;
    proxy_set_header X-Forwarded-For 'https';
    ......}
    }

    For Apache httpd

    <VirtualHost *:443>
    ServerName yourdomain.tld
    ProxyPass / http://127.0.0.1:2369/
    ProxyPassReverse / http://127.0.0.1:2369/
    ProxyAddHeaders On
    RequestHeader set X-Forwarded-Proto "https"
    ......
    </VirtualHost>
    Hardrain
        22
    Hardrain  
       Jun 17, 2017
    如果使用环境变量而非 fixed string
    应该这么写
    Nginx:
    proxy_set_header X-Forwarded-For $scheme;

    Apache httpd:
    RequestHeader set X-Forwarded-Proto "%{REQUEST_SCHEME}s"
    AirSc
        23
    AirSc  
    OP
       Jun 17, 2017
    @Hardrain
    location ^~ / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For 'https';

    proxy_set_header X-NginX-Proxy true;


    proxy_pass http:/localhost:2369;
    proxy_redirect off;
    }

    现在是这样写的,凡是他又会重定向到 http://localhost:2369
    AirSc
        24
    AirSc  
    OP
       Jun 17, 2017
    proxy_pass http:// 是这样的,上面少写了
    AirSc
        25
    AirSc  
    OP
       Jun 17, 2017
    @AirSc 应该是重定向到 https://localhost:2369
    AirSc
        26
    AirSc  
    OP
       Jun 17, 2017
    @Hardrain
    location ^~ / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;


    proxy_pass http://127.0.0.(去掉这个)1:2369;

    这样就好了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2583 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 07:00 · PVG 15:00 · LAX 00:00 · JFK 03:00
    ♥ Do have faith in what you're doing.