反向代理(简称反代)使你可以从外网访问家里或公司等内网的设备,省去为每个内网设备在路由器设置端口转发的麻烦。尤其是强迫症患者不喜欢带端口访问,反代可以解决你的烦恼。反代有哪些好处和详细用法请度娘“反向代理”。

简单介绍我的环境及要实现的效果:
 备注:电信封了80端口,我只能用443。群晖DSM版本需6.0以上才有反代功能。

  1. 用DSM当反代服务器,IP地址为:192.168.1.100
  2. 域名假设为mydomain.com
  3. 通过https://nas.mydomain.com访问DSM管理界面。
  4. 通过https://nas.mydomain.com/photo或https://photo.mydomain.com访问Photo Station
  5. 通过https://blog.mydomain.com访问DSM上的WordPress博客站点
  6. 通过https://ros.mydomain.com访问我的路由器(RB750Gr2,IP:192.168.1.1

首先在路由器设置端口转发,外网443端口转发到内网192.168.1.100的443端口。ROS在IP–>Firewall–>NAT下设置如下,其他路由器请自行设置。

进入群晖系统,在控制面板找到反向代理服务器入口。

点击新增,首先给DSM管理界面作反代。设置说明如下:

描述:随便取名

来源:
协议:选HTTPS
主机名:填nas.mydomain.com
端口:填443

目的地:
协议:选HTTPS
主机名:填192.168.1.100
端口:填5001

 

ROS路由器管理界面反代参考上面的方法完成如下设置:

 

博客的设置不太一样,通过群晖套件Web Station建立虚拟主机(Virtual Host)实现,设置如下:

主机名:填blog.mydomain.com
端口:勾上,如果不用80/443请勾选下面的选项自行填入端口号
文档根目录:选web/wordpress,这是wordpress的默认安装路径
HTTP后端服务器:选Apache,如选nginx页面显示会不正常
PHP:选PHP 5.6

 

最后讲Photo Station的反代,因网址带二级目录,需ssh进入群晖系统手动修改nginx配置。

先启用群晖的SSH功能,用putty连入DSM系统,使用管理员账户登录,然后输入sudo -i(密码和管理员帐号的一样)切换root权限,用vi/vim打开/etc/nginx/app.d/server.ReverseProxy.conf文件,添加以下高亮的那三行,然后保存退出。执行nginx -s reload命令重新加载配置文件,就可以使用https://nas.mydomain.com/photo访问Photo Station了。

如要使用https://photo.mydomain.com访问Photo Station,请参考本文末的说明。

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name nas.mydomain.com;
ssl_certificate /usr/syno/etc/certificate/ReverseProxy/c79eeccc-f248-4b72-9b9e-8348d8c943ec/fullchain.pem;
ssl_certificate_key /usr/syno/etc/certificate/ReverseProxy/c79eeccc-f248-4b72-9b9e-8348d8c943ec/privkey.pem;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_intercept_errors on;
proxy_http_version 1.1;
proxy_pass https://192.168.1.100:5001;
}
location /photo { #Photo Station默认使用二级目录photo访问
proxy_pass https://192.168.1.100; #Photo Station使用80/443端口
}
}

到这并没结束,因为群晖系统每次重启或者网站配置等发生变化,nginx配置文件会被恢复成默认状态,也就是上面新加的三行没了。需建一个任务定期检查配置文件是否被修改,如果改了就用正确的配置文件覆盖系统的。

首先把改好的nginx配置文件保存到某个目录下,比如web/reverse_proxy下,执行如下命令:

cp /etc/nginx/app.d/server.ReverseProxy.conf /volume1/web/reverse_proxy/server.ReverseProxy.conf

接下来创建用户定义的脚本任务:

 

常规设置:任务名称:随便填

计划设置:每天运行频率根据需要填写,最后运行时间要选到一天的最后时间,不然过一段时间就不运行了。

任务设置:根据需要决定是否勾选通过电子邮件发送运行详情,搭配仅在脚本异常终止时发送运行详情选项决定是否每执行一次都发邮件还是仅在异常时发邮件,建议仅在异常时发送,减少邮件打扰频率。
用户定义的脚本框输入如下三行命令:

#!/bin/sh
syn_conf=/etc/nginx/app.d/server.ReverseProxy.conf
ok_conf=/volume1/web/reverse_proxy/server.ReverseProxy.conf
syn_filesize=`ls -l $syn_conf | awk '{ print $5 }'`
ok_filesize=`ls -l $ok_conf | awk '{ print $5 }'`
if [ $syn_filesize -ne $ok_filesize ]
then
  cp $ok_conf $syn_conf
  sudo nginx -s reload
fi

最后勾选刚建立的任务,点击保存。重启NAS或手动执行该任务确认所有反代的网址访问是否正常。

经过以上设置,群晖手机客户端APP也能正常使用,DS Photo使用nas.mydomain.com登录,其他APP使用nas.mydomain.com:443登录,因为Photo Station默认使用80/443端口,其他APP使用5000/5001端口,通过443端口反代转发到5000/5001端口。

##此处介绍如何使用https://photo.mydomain.com访问Photo Station。之前一直没有找到有效的方法,后来发帖到mobile01有网友提供了以下方法,测试成功。

1.在Web Station中创建虚拟主机,文档根目录指向web下面的某个文件夹,比如photostation;

2.在web/photostation中创建一个index.html文件,文件内容如下:

<html>
<body>
<iframe src="https://mydomain.com/photo/" frameborder="0" width="100%" height="100%">
</iframe>
</body>
</html>

3.在domain.com域名后台添加一个photo的CNAME记录。

16 对 “群晖(Synology)反向代理服务器教程”的想法;

  1. 有没有办法通过https://photo.mydomain.com就能直接访问photostation?

  2. @waylon
    photo station官方没有开放自定义域名,理论上是可以修改nginx的配置实现,不过我没有研究过。

  3. @waylon
    用添加虚拟主机的方式可实现https://photo.mydomain.com访问Photo Station,详见本文末尾的方法。

  4. Hi,

    按教程操作了,但最后只是显示Web Station has been enabled. To finish setting up your website, please see the “Web Service” section of DSM Help.,还请指教,谢谢!

  5. 443端口也封了 怎么做反向代理不用端口访问啊?用quickconnect.to的方式可以不显示端口,按理用自己的域名也可以啊~

  6. ng :

    443端口也封了 怎么做反向代理不用端口访问啊?用quickconnect.to的方式可以不显示端口,按理用自己的域名也可以啊~

    quickconnect是通过访问群晖的服务器中转的,家庭的宽带如果运营商封了80和443还是要用端口访问。

  7. @oldghost
    我找到了修改NG来支持https://photo.mydomian.com访问Photo Station的方法

    PhotoStation支持自定义二级域名

    在/usr/syno/share/nginx/nginx.mustache中的http内”{{> /usr/syno/share/nginx/DSM}}”前增加以下代码:
    {{> /usr/syno/share/nginx/Photo}}
    在/usr/syno/share/nginx/下创建Photo.mustache文件,输入以下代码:
    server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name photos.example.com;

    location = / {
    {{#DSM.ssl}}
    if ($scheme = https) {
    rewrite / https://$host/photo/ redirect;
    }
    {{/DSM.ssl}}
    rewrite / http://$host/photo/ redirect;
    }
    include /usr/local/etc/nginx/conf.d/www.PhotoStation.conf;
    }

    添加完成后执行sudo synoservicecfg –restart nginx来重启httpd服务应用这些更改
    参见:https://gist.github.com/kalbasit/9cf9b23f2e0f70c285d0

    1. DS918+_6.2.3表示,
      这个操作没问题,唯一就是需要注意就是自己将 photos.example.com改成自己定义的域名,就行了
      然后重启httpd的服务命令是 synoservice –restart nginx

  8. 你好 请教一下 我在群晖里搭建了SVN服务器 但是默认是SVN协议 能反向代理成HTTP协议么?

    1. SVN应该可以转成HTTP访问的吧,这样就可以使用反向代理了。

  9. /photo成功了,photo.example.com没有成功,是采用的waylon的方法。是不是跟/photo冲突?你成功了么

发表评论

电子邮件地址不会被公开。 必填项已用*标注