转载请注明出处,本文仅用于学习交流,不对之处,恳请指正,部分图片摘取网络,如有侵权请联系。
我们部署了Jellyfin之后,其默认HTTP端口为8096,默认HTTPS端口为8920,而一般网站的端口为80/443。我们可以通过Nginx反向代理的方式或者端口转发的方式来使Jellyfin支持80/443端口访问。当然我们还可以通过使Jellyfin通过root账户运行来直接运行在这两个端口上,但是一般不推荐这么使用。
前言
我最近又在内网的媒体服务器上部署了Navidrome用来放鬼故事,所以以往的UFW端口转发方式已经不能满足我当下的需求。所以我便使用了Nginx反向代理的方式。并企图将它记录到原来的Proxmox VE(PVE) 7.x下,LXC中安装Jellyfin,开启硬转码等文章,但是实在太长了,有点影响阅读。
需求
-
使用Nginx反向代理方式来使Jellyfin支持80、443端口访问。
-
使用UFW端口转发的方式来使Jellyfin支持80、443端口访问。
补充说明:使用端口转发的目的是,当你的服务器上没有运行其他服务的时,不需要通过Nginx/Caddy等软件,仅通过防火墙来支持80、443端口访问Jellyfin。
重要提示:UFW端口转发与Nginx反向代理不兼容,请不要混用
重要提示:家用宽带不支持建站,请不要随意开放80,443端口
Jellyfin使用Nginx反向代理
一般提示:使用Nginx反向代理我们要注意真实用户IP的问题
-
安装Nginx
apt-get install -y nginx
-
新增反向代理文件
nano /etc/nginx/conf.d/alainlam.cn.conf
-
写入以下代码
我将HTTPS的方式注释了,如果你要使用HTTPS,请自行上传证书,同时注意SSL证书的权限问题
server { listen 80; #### 使用HTTPS # 监听IPv4 # listen 443 ssl http2; # 监听IPv6 # listen [::]:443 ssl http2; # HTTP_TO_HTTPS # if ($server_port !~ 443){ # rewrite ^(/.*)$ https://$host$1 permanent; # } # ssl_certificate /etc/ssl/certificates/alainlam.cn.pem; # ssl_certificate_key /etc/ssl/certificates/alainlam.cn.key; # ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; # ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; # ssl_prefer_server_ciphers on; # ssl_session_cache shared:SSL:10m; # ssl_session_timeout 10m; #### END 使用HTTPS # 监听的域名,与你的Frpc服务所配置的custom_domains一致 server_name alainlam.cn; # 开启排除IP功能 real_ip_recursive on; set_real_ip_from 127.0.0.1; set_real_ip_from 192.168.1.0/24; set_real_ip_from 10.0.0.0/8; # set_real_ip_from Frp云服务器IP地址; # set_real_ip_from CDN 服务器IP地址 proxy_headers_hash_max_size 512; proxy_headers_hash_bucket_size 128; # 反向代理 location / { # proxy_pass https://127.0.0.1:8920; proxy_pass http://127.0.0.1:8096; # 兼容http proxy_set_header Upgrade-Insecure-Requests 1; # 告诉后端使用ssl # proxy_ssl_server_name on; # 客户端使用的http协议 proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Scheme $scheme; # 客户端host proxy_set_header Host $host; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-Host $http_host; # 完整URI proxy_set_header X-Original-URI $request_uri; # 客户端使用的端口 proxy_set_header X-Real-Port $remote_port; # 多层代理IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 客户端IP,Jellyfin默认会通过X-Real-IP获取用户IP proxy_set_header X-Real-IP $remote_addr; # 支持Websocket proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection Upgrade; proxy_connect_timeout 60s; proxy_send_timeout 12s; } }
-
测试配置文件是否正常
nginx -t
如果返回以下代码则说明配置无问题
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
-
重载nginx配置
nginx -s reload
使用UFW防火墙进行端口转发方式(不能与Nginx反向代理方式共用)
-
安装UFW防火墙
Debian/Ubuntu一般使用的是UFW防火墙,CentOS/OpenEuler使用的firewall方式暂时不在这里展开
如果你开启了IPv6,虽然一般有路由的防火墙,但是一般还是建议在你内网的服务器上启用防火墙功能 -
安装ufw防火墙
apt-get install -y ufw
-
修改/etc/default/ufw
nano /etc/default/ufw
将其中DEFAULT_FORWARD_POLICY的值修改为ACCEPT,如果没有该项,直接追加
# DEFAULT_FORWARD_POLICY="DROP" DEFAULT_FORWARD_POLICY="ACCEPT"
-
修改/etc/ufw/sysctl.conf
nano /etc/ufw/sysctl.conf
将其中net/ipv4/ip_forward的值修改为1,如果没有该项,直接追加
net/ipv4/ip_forward=1
使之生效
sysctl -p
-
修改 /etc/ufw/before.rules
nano /etc/ufw/before.rules
在最前面或者最后面追加以下内容
# Don't delete these required lines, otherwise there will be errors *nat :PREROUTING ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] # Jellyfin http -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8096 # Jellyfin https -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8920 # don't delete the 'COMMIT' line or these rules won't be processed COMMIT
-
开放端口
开放SSH默认端口
# SSH端口,如果不需要可以不开 ufw allow 22
开放80端口
ufw allow 80
开放443端口
ufw allow 443
开放8096端口
ufw allow 8096
开发8920端口
ufw allow 8920
-
启动防火墙功能
ufw enable
拦截DNS,以域名访问Jellyfin
通过修改路由器的DHCP配置,我们可以对指定域名进行DNS拦截,使我们在内网可以通过域名来访问我们的服务。我使用的主路由为OpenWrt,配置方式请参考以下内容,其他路由器请自行研究。
文章评论