V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
通过以下 Referral 链接购买 DigitalOcean 主机,你将可以帮助 V2EX 持续发展
DigitalOcean - SSD Cloud Servers
taibin
V2EX  ›  VPS

共享 ip 的 vps 有设置反向代理的权限吗?

  •  
  •   taibin · 2018-02-14 22:34:58 +08:00 · 843 次点击
    这是一个创建于 2465 天前的主题,其中的信息可能已经有所发展或是发生改变。

    手上有一共享 ip 的 vps,现在需在上面建站和绑定域名,因为外网 80 端口是公用,主机商给了我们自己在后台映射外网端口的功能,比如我将内网 80 端口映射到外网 22222 端口,这时我通过 ht tp:// 我的域名。com:22222 就可以访问我的网站,现在我想隐藏后面的一长串端口号,所以就用了 nginx 的反向代理,但配置了总是无效,是不是我没有监听外网 ip 80 端口的权限啊(是要外网 ip 服务器权限的主机商才能配置这个反向代理转发到我的 vps 吗)?
    请高手指点!

    33 条回复    2018-02-17 05:46:05 +08:00
    msg7086
        1
    msg7086  
       2018-02-15 00:06:53 +08:00
    当然。
    而且这和你开 nginx 反向代理毫无关系,是主机商来开的。
    taibin
        2
    taibin  
    OP
       2018-02-15 00:29:46 +08:00
    @msg7086 那我这种共享 ip 的机子,又没有主机商的权限,我建站需要隐藏后面那个端口号有什么方法没?
    msg7086
        3
    msg7086  
       2018-02-15 00:57:55 +08:00
    没有。建站需要公网 IP 的控制权。
    taibin
        4
    taibin  
    OP
       2018-02-15 01:17:55 +08:00
    @msg7086 请问现在那些主流的国内外 vps,比如 digitalocean,linode,vaturl,搬瓦工之类的,他们比较入门的那几款应该也是共享 ip 吧,这些都没办法建站吗?只能另外买独立 ip 吗?
    msg7086
        5
    msg7086  
       2018-02-15 01:19:00 +08:00
    没见过这些 VPS 卖共享 IP 的。
    taibin
        6
    taibin  
    OP
       2018-02-15 01:25:56 +08:00
    @msg7086 上面这几家很便宜的像 2.5$或者 5$的 vps 都不是共享 ip 吗? 都是独立的吗?我新了解 vps 不久,找了很多资料还是不得其解,所以问的有点多了,先谢谢你!
    msg7086
        7
    msg7086  
       2018-02-15 01:35:15 +08:00
    VPS 只要不特别说明,都是独立 IP。
    只有特别说明共享 IP,或者 NAT VPS 的才没有独立 IP。

    $2.5 也不算是特别便宜。以前打折时候买的 Virmach 家一年 10 刀甚至 5 刀的,也有独立 IP。没有的是少数。
    taibin
        8
    taibin  
    OP
       2018-02-15 01:50:42 +08:00
    @msg7086 原来如此,因为我之前买时还不知 nat 的意思,也不知它不能直接绑域名,我刚在上面几家网站上看介绍也没提 ip 到底是 nat 还是独立,原来默认是独立的。至于你说的 virmach,你用了多久了,速度和稳定性如何,现在还有活动不?
    msg7086
        9
    msg7086  
       2018-02-15 01:55:36 +08:00
    我买机器几乎不考虑中国的连接性,对你可能没有参考价值。
    而且 Virmach 我自己也没怎么用,就是黑 5 或者圣诞打折的时候随便买的。
    如果不考虑中国连接性的话,可以看看这个投票 https://www.lowendtalk.com/discussion/134743。

    我重要的项目都是另外买的独立服务器,然后和中国对接的反代再另外挑选。
    taibin
        10
    taibin  
    OP
       2018-02-15 02:17:01 +08:00
    @msg7086 你反代是用国外机配 nginx 转发分配给中国机吗?(可能用词不专业,但大致了解反代原理)
    msg7086
        11
    msg7086  
       2018-02-15 02:43:39 +08:00
    一般是在日本和香港买性能差但是网络好的机器,配置 nginx 做转发。
    然后在美国或者欧洲买价格便宜性能好的杜甫跑程序本体。
    taibin
        12
    taibin  
    OP
       2018-02-15 03:05:45 +08:00
    @msg7086 你的用户是面向国内吗?我以为反代只是隐藏本体真实地址,但最终网络和性能速度还是受本体影响,不是这样的吗?
    taibin
        13
    taibin  
    OP
       2018-02-15 03:07:27 +08:00
    @msg7086 要不然的话,你本体放在美欧也很影响速度啊,如果面向国内的话
    msg7086
        14
    msg7086  
       2018-02-15 03:35:49 +08:00
    中国以外的全球网络速度都不是很差,日本香港欧洲北美互联速度都飞快的。
    特别是本体和日本之间的网络性能通常可以忽略不计。
    另外反代也可以适当缓存静态资源,实际体验比直连好得多。
    taibin
        15
    taibin  
    OP
       2018-02-16 01:34:22 +08:00
    @msg7086 我分别买了 virmach 和另外一家的,都是独立 ip 了,但我反向代理只有我之前那个 nat 的 vps 可以正常显示,其他的 vps 或虚拟主机上的站都无法正常访问:

    代理阿里云上的虚拟机网站,直接显示阿里云提示未备案不能访问的页面(实际上我是备案了并且通过阿里云的域名能正常访问的,不知道是不是阿里云限制了其他域名的反向代理所以才拦截);
    代理另一家国外的虚拟主机,弹出的是错误页面,没写 404 但应该是 cpanel 管理面板的 404,不知是不是这个服务器也拦截了其他域名反向代理。然后反向代理 virmach 上的站也是打不开忘了是 404 还是 502,503,还有反代百度或者其他的别人的网站也没有一个成功,请问我这是哪里设置不对呢,或者现在
    taibin
        16
    taibin  
    OP
       2018-02-16 01:35:55 +08:00
    或者现在屏蔽反代的技术成熟 所以很多服务器商都屏蔽反代了?
    msg7086
        17
    msg7086  
       2018-02-16 04:37:45 +08:00
    我觉得是你的代理配置有问题。
    你有给 nginx proxy 设置 host 头吗?

    resolver 8.8.4.4;
    proxy_pass http://$host;
    proxy_set_header Host $host;
    taibin
        18
    taibin  
    OP
       2018-02-16 21:15:15 +08:00 via Android
    @msg7086
    我就是担心这些细节的地方写错,所以是在宝塔控制面板后台添加的,他是一个网站有一个单独的 server 配置文件,比如我要通过我的子域名 vir.zyclub.top 访问 Baidu,在设置里面有目标 url 和发送域名两项,发送域名他默认是$host,我没有改动,目标 url 我写的就是百度的 http://baidu.com,添加后后台自动生成代码如下:

    我看了设置前后对比,主要就是自动生成了#PROXY-START 到
    #PROXY-END 结束 那一大段 location 的配置,第一个 location 就是你说的 host 头,这样配置打开是 502,我注释掉上面代码中的 502 那一句还是没变


    server
    {
    listen 80;
    server_name vir.zyclub.top;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/vir.zyclub.top;

    #SSL-START SSL 相关配置,请勿删除或修改下一行带注释的 404 规则
    #error_page 404/404.html;
    #SSL-END

    #ERROR-PAGE-START 错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START PHP 引用配置,可以注释或修改

    #PROXY-START
    location ~ /purge(/.*) {
    proxy_cache_purge cache_one $host$request_uri$is_args$args;
    #access_log /www/wwwlogs/vir.zyclub.top_purge_cache.log;
    }

    location /
    {
    proxy_pass http://www.baidu.com;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;

    #缓存相关配置
    #proxy_cache cache_one;
    #proxy_cache_key $host$request_uri$is_args$args;
    #proxy_cache_valid 200 304 301 302 1h;

    #持久化连接相关配置
    #proxy_connect_timeout 30s;
    #proxy_read_timeout 86400s;
    #proxy_send_timeout 30s;
    #proxy_http_version 1.1;
    #proxy_set_header Upgrade $http_upgrade;
    #proxy_set_header Connection "upgrade";

    add_header X-Cache $upstream_cache_status;

    expires 12h;
    }

    location ~ .*\.(php|jsp|cgi|asp|aspx|flv|swf|xml)?$
    {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_pass http://www.baidu.com;

    }
    #PROXY-END

    include enable-php-54.conf;
    #PHP-INFO-END

    #REWRITE-START URL 重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/vir.zyclub.top.conf;
    #REWRITE-END

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
    return 404;
    }

    access_log /www/wwwlogs/vir.zyclub.top.log;
    }
    msg7086
        19
    msg7086  
       2018-02-17 00:29:45 +08:00
    规则一眼看不出毛病。有重启过 nginx 吗?
    taibin
        20
    taibin  
    OP
       2018-02-17 00:57:29 +08:00 via Android
    @msg7086 每次都重载加重启
    taibin
        21
    taibin  
    OP
       2018-02-17 01:06:41 +08:00 via Android
    @msg7086 问题是几个 vps 其中一个又可以,其他的以及别人的站都不行,我指向另一个虚拟空间的站是由 cpanel 管理面板返回的错误页面(因为我那个虚拟空间商用的是 cpanel 面板),所以我想是不是主机商可以在他的服务器屏蔽别人反向代理他主机上的站,或者我需要在被指向的那个站做什么设置
    msg7086
        22
    msg7086  
       2018-02-17 01:25:07 +08:00
    等等。
    你用宝塔面板反代百度,但是跳出了 cPanel 的错误页面?还是我没理解对你的意思?
    另外反代一般是没法屏蔽的,反代对服务器来说就和一个普通人直接访问网站没什么区别。
    taibin
        23
    taibin  
    OP
       2018-02-17 01:29:13 +08:00 via Android
    @msg7086 我自己的几个 vps 是装的宝塔,而另外还有一个虚拟主机(不是 vps)是从另外一个主机商买的,主机商的后台是 cpanel,是不同主机商的
    taibin
        24
    taibin  
    OP
       2018-02-17 01:31:39 +08:00 via Android
    哦看错你问题了,我分别反代了百度等其他非自己的网站测试,比如百度出来 502 成为,而反代到自己的一个虚拟空间的错误是 cpanel 错误
    taibin
        25
    taibin  
    OP
       2018-02-17 01:32:56 +08:00 via Android
    还有几个 vps 之间分别反代只有那一个 vps 可以被反代以外,其他的好像都是 404
    taibin
        26
    taibin  
    OP
       2018-02-17 01:37:53 +08:00 via Android
    刚刚反代了淘宝,出来 501,提示是
    501 Not Implemented

    The requested method to the URL not supported.

    Powered by Tengine

    ___

    tengine 是淘宝自己的 nginx 版本,所以应该是淘宝设置了拒绝之类的
    msg7086
        27
    msg7086  
       2018-02-17 01:39:50 +08:00   ❤️ 1
    噗,我傻了。
    你这里 host 设错了。我以为你是要同域名反代,结果你做的是不同域名反代。

    不同域名反代需要调整 Host 的,比如这样:

    proxy_set_header Host baidu.com;
    proxy_pass http://192.168.baidu-ip.1;

    你上面规则里设置$host 就等于是去对方服务器上找 zyclub 域名,那当然是不存在了。
    proxy_pass 指定连接的 IP,Host 指定反代的域名。


    或者直接写
    proxy_pass http://baidu.com;
    删掉 Host 那行,那么 Host 默认就是发 proxy_pass 里的域名,那也行。


    一般我们是用第一种写法的。
    taibin
        28
    taibin  
    OP
       2018-02-17 01:44:24 +08:00 via Android
    我试试,先谢谢!
    taibin
        29
    taibin  
    OP
       2018-02-17 01:54:28 +08:00 via Android
    我之前对这几个属性对应的到底是对方还是我的有点混淆,按你说的确实可以打开对方的网站,但比如我的 vir.zyclub.top,反代淘宝,出来就跳转淘宝网址了
    taibin
        30
    taibin  
    OP
       2018-02-17 01:56:53 +08:00 via Android
    @msg7086 也就是 host 是对方的域名,proxy_pass 是对方的 ip 吗?这个 location 里面这两个属性对应都是对方的吗?
    msg7086
        31
    msg7086  
       2018-02-17 02:08:10 +08:00
    跳转淘宝网址说明反代成功了。跳转是页面上的防反代的代码做了(代码能运行说明你反代成功了)。
    你说的这两个属性都是对方的。
    taibin
        32
    taibin  
    OP
       2018-02-17 05:38:57 +08:00 via Android
    @msg7086 太谢谢了,帮我纠正了这个错误。不过我 a 站反代到我另一个 wp 建的博客 b 站上也是直接跳转到 b 站的域名,这样感觉就跟跳转页面差不多了。
    msg7086
        33
    msg7086  
       2018-02-17 05:46:05 +08:00
    跳转页面是网站发起的,这个没办法的。所以一般反代不会这么做,多数是自己的同一个域名做内部反代。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5350 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 07:32 · PVG 15:32 · LAX 23:32 · JFK 02:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.