Alain's Blog

  1. 首页
  2. 软件工具
  3. 正文

Jellyfin使用80/443端口,Nginx反向代理或UFW端口转发

2022年10月21日 6182点热度 4人点赞 0条评论

Jellyfin使用80,443端口

转载请注明出处,本文仅用于学习交流,不对之处,恳请指正,部分图片摘取网络,如有侵权请联系。

我们部署了Jellyfin之后,其默认HTTP端口为8096,默认HTTPS端口为8920,而一般网站的端口为80/443。我们可以通过Nginx反向代理的方式或者端口转发的方式来使Jellyfin支持80/443端口访问。当然我们还可以通过使Jellyfin通过root账户运行来直接运行在这两个端口上,但是一般不推荐这么使用。

前言

我最近又在内网的媒体服务器上部署了Navidrome用来放鬼故事,所以以往的UFW端口转发方式已经不能满足我当下的需求。所以我便使用了Nginx反向代理的方式。并企图将它记录到原来的Proxmox VE(PVE) 7.x下,LXC中安装Jellyfin,开启硬转码等文章,但是实在太长了,有点影响阅读。

需求

  1. 使用Nginx反向代理方式来使Jellyfin支持80、443端口访问。

  2. 使用UFW端口转发的方式来使Jellyfin支持80、443端口访问。

补充说明:使用端口转发的目的是,当你的服务器上没有运行其他服务的时,不需要通过Nginx/Caddy等软件,仅通过防火墙来支持80、443端口访问Jellyfin。

重要提示:UFW端口转发与Nginx反向代理不兼容,请不要混用

重要提示:家用宽带不支持建站,请不要随意开放80,443端口

Jellyfin使用Nginx反向代理

一般提示:使用Nginx反向代理我们要注意真实用户IP的问题

  1. 安装Nginx

    apt-get install -y nginx
  2. 新增反向代理文件

    nano /etc/nginx/conf.d/alainlam.cn.conf
  3. 写入以下代码

    我将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;
        }
    }
  4. 测试配置文件是否正常

    nginx -t

    如果返回以下代码则说明配置无问题

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
  5. 重载nginx配置

    nginx -s reload

使用UFW防火墙进行端口转发方式(不能与Nginx反向代理方式共用)

  1. 安装UFW防火墙

    Debian/Ubuntu一般使用的是UFW防火墙,CentOS/OpenEuler使用的firewall方式暂时不在这里展开
    如果你开启了IPv6,虽然一般有路由的防火墙,但是一般还是建议在你内网的服务器上启用防火墙功能

  2. 安装ufw防火墙

    apt-get install -y ufw
  3. 修改/etc/default/ufw

    nano /etc/default/ufw

    将其中DEFAULT_FORWARD_POLICY的值修改为ACCEPT,如果没有该项,直接追加

    # DEFAULT_FORWARD_POLICY="DROP"
    DEFAULT_FORWARD_POLICY="ACCEPT"
  4. 修改/etc/ufw/sysctl.conf

    nano /etc/ufw/sysctl.conf

    将其中net/ipv4/ip_forward的值修改为1,如果没有该项,直接追加

    net/ipv4/ip_forward=1

    使之生效

    sysctl -p
  5. 修改 /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

    使用UFW防火墙转发端口

  6. 开放端口

    开放SSH默认端口

    # SSH端口,如果不需要可以不开
    ufw allow 22

    开放80端口

    ufw allow 80

    开放443端口

    ufw allow 443

    开放8096端口

    ufw allow 8096

    开发8920端口

    ufw allow 8920
  7. 启动防火墙功能

    ufw enable

拦截DNS,以域名访问Jellyfin

通过修改路由器的DHCP配置,我们可以对指定域名进行DNS拦截,使我们在内网可以通过域名来访问我们的服务。我使用的主路由为OpenWrt,配置方式请参考以下内容,其他路由器请自行研究。

拦截域名

标签: Jellyfin 反向代理 群晖
最后更新:2023年3月18日

Alain

看了我的文,就是我的人,点个赞再走成不成

点赞
< 上一篇
下一篇 >

文章评论

取消回复

文章目录
  • 前言
  • 需求
  • Jellyfin使用Nginx反向代理
  • 使用UFW防火墙进行端口转发方式(不能与Nginx反向代理方式共用)
  • 拦截DNS,以域名访问Jellyfin

COPYRIGHT © 2022 Alain's Blog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang