diff --git a/.env b/.env new file mode 100644 index 0000000..a41c9ea --- /dev/null +++ b/.env @@ -0,0 +1,31 @@ +# ----------------------------------- 默认必须修改项目 ----------------------------------- # +# 需修改域名和数据库密码 +RSS_DOMAIN=rss.yourdomain.com +RSSHUB_DOMAIN=rsshub.yourdomain.com +POSTGRES_PASSWORD=rssforever.com + + +# ----------------------------------- 开启 HTTPS 支持 ----------------------------------- # +# HTTP/HTTPS 协议,默认为 http 如需使用 HTTPS 需将值改为 https +PROTOCOL=http + + +# ----------------------------------- HTTPS 证书和密钥 ---------------------------------- # +# 上传证书文件后,需修改域名证书和密钥的文件名. +# 如果 RSS 和 RSSHUB 使用不同证书,需分别修改以下证书和密钥的文件名. +# 如果 RSS 和 RSSHUB 使用同一泛域名证书,请修改为同一文件名. + +# RSS 证书和密钥文件名 +RSS_DOAMIN_CERT=yourdomain.com.cer +RSS_DOMAIN_KEY=yourdomain.com.key + +# RSSHUB 证书和密钥文件名 +RSSHUB_DOAMIN_CERT=yourdomain.com.cer +RSSHUB_DOMAIN_KEY=yourdomain.com.key + + +# ------------------------------------- 镜像和版本 ------------------------------------- # +# 镜像和版本,请勿修改删除. +NGINX_VERSION=stable +TTRSS_IMAGE=wangqiru/ttrss +TTRSS_VERSION=latest-2021-05-19 diff --git a/01.jpg b/01.jpg new file mode 100644 index 0000000..d60e11b Binary files /dev/null and b/01.jpg differ diff --git a/README.md b/README.md index d05a84e..a0eccd1 100644 --- a/README.md +++ b/README.md @@ -1 +1,189 @@ -# rssforever \ No newline at end of file +# rssforever +## 简介 +本项目为 Nginx + TTRSS + RSSHub 整合 docker 容器化快速一键部署方案. + +### 前言 +[rssforever.com](rssforever.com) 为网友提供免费的 RSS 和 RSSHub 服务已经一年有余,由于服务器压力及个人精力有限等原因已停止提供 RSS 服务.鉴于很多新手用户技术有限,特将 nginx , ttrss , rsshub 三个项目整合到 docker compose 中,实现一键部署使用. + +### 特点 +1. 本项目针对新手用户,提供整合配置,无需繁琐的设置,即使是新手用户最快也只需要几步操作,几分钟即可部署使用. +2. 使用 docker compose 编排配置,所有命令,配置及环境变量集中管理,方便维护和迁移. +3. 更换服务器也仅需打包备份一个文件夹,迁移解压后一条命令即可恢复使用. + +### 环境需求 +- 至少 1 核 1G 境外 VPS 服务器 ( 国内服务器由于网络问题,不推荐使用. ) +- 拥有自己的域名 ( 自行申请泛域名证书可使用 HTTPS 部署 ) +- 服务器未占用 80/443 端口 +- 服务器已安装 docker 和 docker compose 环境 ( 未安装可参考下文简易安装指南 ) + +> 由于此项目为新手向服务,不支持已被其他服务占用 80/443 端口的服务器.请停止相关服务或更换新服务器部署使用. +> 此项目一共会启动 9 个容器,服务器性能不足请不要部署其他应用,并且私有化个人使用.避免服务器压力过大. +> 如果服务器上已有 nginx 等占用 80/443 端口的服务,同时又有部署的需求,请联系我进行付费技术支持. + + +--- + + +## 部署 +docker 及 docker compose 必须提前安装到服务器中,相关教程网上很多,也可逐一执行以下 6 条命令安装启动: +```shell +# 安装 docker +curl -fsSL https://get.docker.com -o get-docker.sh +sudo sh get-docker.sh +sudo systemctl start docker +sudo systemctl enable docker +# 安装 docker compose +curl -L https://github.com/docker/compose/releases/download/1.29.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose +chmod +x /usr/local/bin/docker-compose +``` +安装完成并检查 +```shell +docker -v +docker-compose -v +``` + +### 配置域名解析 +分别为`RSS`和`RSSHub`两个站点配置两个二级域名,例如`rss.yourdomain.com`和`rsshub.yourdomain.com`.并设置 A 记录或 CNAME 到服务器. + +![01](./01.jpg) + +### HTTP 部署 +#### 拉取代码 +```shell +git clone https://github.com/stilleshan/rssforever.git +# 拉取代码 +cd rssforever +# 进入目录,注意不要修改目录名,否则会导致 watchtower 无法监控容器自动更新镜像. +``` + +#### 配置 .env 文件 +修改`.env`文件中`RSS`和`RSSHub`的域名以及数据库密码 +```shell +RSS_DOMAIN=rss.yourdomain.com +RSSHUB_DOMAIN=rsshub.yourdomain.com +POSTGRES_PASSWORD=rssforever.com +``` + +#### 启动 +```shell +docker-compose up -d +# 再次注意需要在 rssforever 目录下执行 +``` + +#### 完成 +访问 http://rss.yourdomain.com 使用`admin`和`password`登陆使用,请及时修改密码. +访问 http://rsshub.yourdomain.com 并参考[官方文档](https://docs.rsshub.app/)使用. + +### HTTPS 部署 +#### 拉取代码 +```shell +git clone https://github.com/stilleshan/rssforever.git +# 拉取代码 +cd rssforever +# 进入目录,注意不要修改目录名,否则会导致 watchtower 无法监控自动更新容器. +``` + +#### 配置 .env 文件 +修改`.env`文件中`RSS`和`RSSHub`的域名以及数据库密码 +```shell +RSS_DOMAIN=rss.yourdomain.com +RSSHUB_DOMAIN=rsshub.yourdomain.com +POSTGRES_PASSWORD=rssforever.com +``` + +上传`泛域名`证书和密钥文件至`nginx/ssl`目录下. +并以`yourdomain.com.cer`形式命名,证书后缀`cer`或者`crt`等均不影响使用. +修改`.env`文件中域名证书和密钥文件名 +修改`.env`文件中`PROTOCOL=https` +具体参考如下: +```shell +PROTOCOL=https +RSS_DOAMIN_CERT=yourdomain.com.cer +RSS_DOMAIN_KEY=yourdomain.com.key +RSSHUB_DOAMIN_CERT=yourdomain.com.cer +RSSHUB_DOMAIN_KEY=yourdomain.com.key +``` +**注意:如果使用单域名证书,请分别将两个域名证书上传至`nginx/ssl`中,分别修改`.env`文件中 RSS 和 RSSHub 域名证书和密钥文件名.** +```shell +# 单域名参考配置 +RSS_DOAMIN_CERT=rss.yourdomain.com.cer +RSS_DOMAIN_KEY=rss.yourdomain.com.key +RSSHUB_DOAMIN_CERT=rsshub.yourdomain.com.cer +RSSHUB_DOMAIN_KEY=rsshub.yourdomain.com.key +``` + +#### 启动 +```shell +docker-compose up -d +# 再次注意需要在 rssforever 目录下执行 +``` + +#### 完成 +访问 https://rss.yourdomain.com 使用`admin`和`password`登陆使用,请及时修改密码. +访问 https://rsshub.yourdomain.com 并参考[官方文档](https://docs.rsshub.app/)使用. + + +--- + + +## 进阶 +### 强制跳转 HTTPS +如使用`HTTPS`部署,可手动修改`nginx/vhost`目录中的`rss.conf`和`rsshub.conf`第`9`行,将`#`注释符号删除. +```nginx + return 301 https://rss.yourdomain.com$request_uri; +``` +重启 docker compose 生效 +```shell +# 建议直接停止并在次启动 +cd rssforever +# 进入目录 +docker-compose down +# 停止 +docker-compose up -d +# 启动 +``` + +### 证书更新 +本项目目前并未配置自动更新证书的功能,今后视情况加入其中. +泛域名有效期三个月,请自行续签后覆盖原有证书,执行`docker-compose down`停止服务,并在次执行`docker-compose up -d`启动即可. + +### 高级配置 +TTRSS 和 RSSHub 可以通过修改`docker-compose.yml`设置环境变量来配置高级功能,详情请参考本文末尾项目官方文档进行修改. +值得注意的是本项目的`docker-compose.yml`定制化过多,请慎重修改. +通常来说修改`volumes`和`environment`参数来挂载目录,设置一些高级配置并不会对本服务有影响.如诺出现问题请提交`issue`. + +### 备份恢复 +#### 备份 +本项目采用 docker compose 部署,所有配置及数据都在`rssforever`目录中,方便备份和迁移. +`rss`目录会在项目启动后自动生成,存放`rss`的数据库,不可删除.( 除非希望重新部署 ) +`rsshub`目录会在项目启动后自动生成,此目录为缓存数据,迁移时可以删除以免占用过大空间. +**其他所有文件及目录,如不清楚请不要随意修改和删除,否则会导致服务无法启动.** +#### 恢复 +将域名 A 记录重新指向新服务器,将备份的`rssforever`目录解压进入启动即可. +```shell +cd rssforever +# 进入目录 +docker-compose up -d +# 启动 +``` + +### 初始化 +如果误操作修改了相关参数导致无法使用,请备份`rss`目录后,删除整个`rssforever`目录.重新按照上文`git clone`拉取代码,修改`.env`文件,在将`rss`移动至`rssforever`下,执行`docker-compose up -d`重新部署. + + +--- + + +## 其他 +### 感谢 +感谢以下大神提供的项目: +- [Awesome TTRSS 官方文档](https://ttrss.henry.wang/) +- [Awesome TTRSS GitHub](https://github.com/HenryQW/Awesome-TTRSS) +- [RSSHub 官方文档](https://docs.rsshub.app/) +- [DIYgod/RSSHub GitHub](https://github.com/DIYgod/RSSHub) + +### 链接 +- [rssforever.com](https://rssforever.com) +- [RSSHub 公共服务](https://rsshub.rssforever.com) +- [泛域名证书申请相关文章](https://www.ioiox.com/tag/SSL/) +- [新手教程 Nginx + TTRSS + RSSHub 整合 docker 容器化快速一键部署方案](https://www.ioiox.com/archives/133.html) diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..0c9fbd2 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,130 @@ +version: "3" + + +networks: + rssforever: + + +#---------------------------------------- nginx ---------------------------------------- # +services: + nginx: + image: nginx:${NGINX_VERSION} + restart: always + ports: + - 80:80 + - 443:443 + volumes: + - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf + - ./nginx/conf/nginx.sh:/nginx.sh + - ./nginx/vhost:/etc/nginx/conf.d/vhost + - ./nginx/ssl:/etc/nginx/ssl + - ./nginx/html:/usr/share/nginx/html + environment: + - RSS_DOMAIN=${RSS_DOMAIN} + - RSS_DOAMIN_CERT=${RSS_DOAMIN_CERT} + - RSS_DOMAIN_KEY=${RSS_DOMAIN_KEY} + - RSSHUB_DOMAIN=${RSSHUB_DOMAIN} + - RSSHUB_DOAMIN_CERT=${RSSHUB_DOAMIN_CERT} + - RSSHUB_DOMAIN_KEY=${RSSHUB_DOMAIN_KEY} + networks: + - rssforever + depends_on: + - service.rss + - rsshub + command: ["sh", "-c", "/nginx.sh"] + + +#---------------------------------------- ttrss ---------------------------------------- # + service.rss: + image: ${TTRSS_IMAGE}:${TTRSS_VERSION} + environment: + - SELF_URL_PATH=${PROTOCOL}://${RSS_DOMAIN} + - DB_PASS=${POSTGRES_PASSWORD} + - PUID=1000 + - PGID=1000 + - ENABLE_PLUGINS=auth_internal,remove_iframe_sandbox + networks: + - rssforever + stdin_open: true + tty: true + restart: always + + + service.mercury: + image: wangqiru/mercury-parser-api:latest + networks: + - rssforever + restart: always + + + service.opencc: + image: wangqiru/opencc-api-server:latest + environment: + - NODE_ENV=production + networks: + - rssforever + restart: always + + + database.postgres: + image: postgres:13-alpine + environment: + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + volumes: + - ./rss/postgres/data/:/var/lib/postgresql/data + networks: + - rssforever + restart: always + + +#---------------------------------------- rsshub ---------------------------------------- # + rsshub: + image: diygod/rsshub + restart: always + ports: + - 1200:1200 + environment: + NODE_ENV: production + CACHE_TYPE: redis + REDIS_URL: 'redis://redis:6379/' + PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000' + depends_on: + - redis + - browserless + networks: + - rssforever + + + browserless: + image: browserless/chrome + restart: always + networks: + - rssforever + + + redis: + image: redis:alpine + restart: always + environment: + - TZ=Asia/Shanghai + volumes: + - ./rsshub/redis-data:/data + networks: + - rssforever + + +#---------------------------------------- watchtower ---------------------------------------- # +# 每天早上 10 点定时更新 RSSHub , 如无需可注释或删除本段. + watchtower: + image: containrrr/watchtower:latest + volumes: + - /var/run/docker.sock:/var/run/docker.sock + environment: + - TZ=Asia/Shanghai + - WATCHTOWER_CLEANUP=true + - WATCHTOWER_SCHEDULE=0 0 10 * * * + restart: always + command: rssforever_watchtower_1 rssforever_rsshub_1 rssforever_redis_1 rssforever_browserless_1 + networks: + - rssforever + diff --git a/nginx/conf/nginx.conf b/nginx/conf/nginx.conf new file mode 100644 index 0000000..988bb51 --- /dev/null +++ b/nginx/conf/nginx.conf @@ -0,0 +1,33 @@ + +user nginx; +worker_processes 1; + +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; + + +events { + worker_connections 1024; +} + + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + #tcp_nopush on; + + keepalive_timeout 65; + + #gzip on; + + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/conf.d/vhost/*.conf; +} diff --git a/nginx/conf/nginx.sh b/nginx/conf/nginx.sh new file mode 100755 index 0000000..4399201 --- /dev/null +++ b/nginx/conf/nginx.sh @@ -0,0 +1,4 @@ +sed -i -e "/rss.yourdomain.com/s/rss.yourdomain.com/${RSS_DOMAIN}/g" -e "/yourdomain.com.cer/s/yourdomain.com.cer/${RSS_DOAMIN_CERT}/g" -e "/yourdomain.com.key/s/yourdomain.com.key/${RSS_DOMAIN_KEY}/g" /etc/nginx/conf.d/vhost/rss.conf +sed -i -e "/rsshub.yourdomain.com/s/rsshub.yourdomain.com/${RSSHUB_DOMAIN}/g" -e "/yourdomain.com.cer/s/yourdomain.com.cer/${RSSHUB_DOAMIN_CERT}/g" -e "/yourdomain.com.key/s/yourdomain.com.key/${RSSHUB_DOMAIN_KEY}/g" /etc/nginx/conf.d/vhost/rsshub.conf +nginx -s reload +nginx -g 'daemon off;' diff --git a/nginx/html/index.html b/nginx/html/index.html new file mode 100644 index 0000000..8f2bfd0 --- /dev/null +++ b/nginx/html/index.html @@ -0,0 +1,11 @@ + + + + + + Document + + + Hello World + + \ No newline at end of file diff --git a/nginx/ssl/yourdomain.com.cer b/nginx/ssl/yourdomain.com.cer new file mode 100644 index 0000000..675c586 --- /dev/null +++ b/nginx/ssl/yourdomain.com.cer @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDPDCCAiQCCQCgDNdxnY2O+zANBgkqhkiG9w0BAQsFADBgMQswCQYDVQQGEwJD +TjELMAkGA1UECAwCQkoxCzAJBgNVBAcMAkJKMRwwGgYDVQQKDBNEZWZhdWx0IENv +bXBhbnkgTHRkMRkwFwYDVQQDDBAqLnlvdXJkb21haW4uY29tMB4XDTIxMDUyNTA2 +MTEyN1oXDTMxMDUyMzA2MTEyN1owYDELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkJK +MQswCQYDVQQHDAJCSjEcMBoGA1UECgwTRGVmYXVsdCBDb21wYW55IEx0ZDEZMBcG +A1UEAwwQKi55b3VyZG9tYWluLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAPWLjqI18FYtRbH9z1V/zvkL/TTJQoobUcs7mOYVGQoS+kiyDFkV/xz3 +B0UZLTzrgjNgsClsyrYp8iQFAxVu5xkPhwu9HjBaF5F3yMJEbImOtcFC5gT2Ymd1 +qLcRTsXmzGC34g/mTbc/9lvdQ2SXBWo8OPxcuguA/WBEykU99olcnHefqOgcdLmN +FRZE5mKmFZuF523GMfYGtRSbS0AKRB4Zom56VOf3wlSwYYqf7fL8/OKIdBujH6U7 +j3mIWSO6/Vz2esFMX6zAL+PV0lrpiNpW59PHftreYcB1LVQTLwmxFw1Y6YKs/3Ow +a07H18ZAnbMDmpJ82bm9xmRS/5uvu/MCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEA +AG/kegcZhCowJwR5lSe0hCdYXsWQsOlNnVUKcA1y4uPQni/LbpsgnKH8VH3ATAOQ +0aseom71ZhDaxhaTQYGcOeH6y5TlLh/Izx9S9NbxF33JOED6/KnM1uDtZTHc8G9x +R6RNEwts4fSybwixlV6bKp/LoLCbNymcBnmUEZb+rGb3quz2VYjqZjTjGU4YZKmu +7eQynvD1TihxZ0QBX4ByIl7YfYswNGfJDlOzvijZhLhCniKfHZFNsVZArdorM1XH +Dkb5Ec4ycKEINmFc7FxsnwPZxxgx4AiCl1NGOtzN/cPs8tKdPYddBOh9yuV9DWPf +P876ey9hKc5/GrCgT181MA== +-----END CERTIFICATE----- diff --git a/nginx/ssl/yourdomain.com.key b/nginx/ssl/yourdomain.com.key new file mode 100644 index 0000000..df78181 --- /dev/null +++ b/nginx/ssl/yourdomain.com.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEogIBAAKCAQEA9YuOojXwVi1Fsf3PVX/O+Qv9NMlCihtRyzuY5hUZChL6SLIM +WRX/HPcHRRktPOuCM2CwKWzKtinyJAUDFW7nGQ+HC70eMFoXkXfIwkRsiY61wULm +BPZiZ3WotxFOxebMYLfiD+ZNtz/2W91DZJcFajw4/Fy6C4D9YETKRT32iVycd5+o +6Bx0uY0VFkTmYqYVm4XnbcYx9ga1FJtLQApEHhmibnpU5/fCVLBhip/t8vz84oh0 +G6MfpTuPeYhZI7r9XPZ6wUxfrMAv49XSWumI2lbn08d+2t5hwHUtVBMvCbEXDVjp +gqz/c7BrTsfXxkCdswOaknzZub3GZFL/m6+78wIDAQABAoIBAFnNxcfb1F+gRSo4 ++rh5exgo412H8jcSkNK0pFIaC0Nc937Y5505Z0mPq3ABKkNqmv7xcNxltqnzI2U7 +FAqlug23WRvY+g6TFKWWWq16WvvgXuck8X2FIy5VoPP7d4T3yW3iMuK/x1KrKQ4m +GXzTox5ckjbyLvUAIysvXY7/f4hyyDxT28edpl797uQrWqtvBS1B3i62LgL6q6VM +/Q3cl3OmFLH8BzpgwHu83dJhFjwq6KPmlMwgBT7IB0Pruk77jRXD7QvUs/Yft45Y +5RJ9CIBRB4CZEW9Hts9EZypWta3s4AMlsm4nN9bu/XL32tlcPTO508LbS0yDa5g8 +WqMQ2CECgYEA/PEnzt/IgvMTroXFy9ZzpTGNnG3pn5N65i1Xk5GFG3aMdCgDcyQO +dcUFUht4ElI5TbDSuWduBNkmgulpaNfE5HNwTXBSvHS5NrSe5J0jx1HD6kF4pEx7 +n98tgu5KjwbGjWF4jJxstNLM1O5qqVd/Xzj5j7E+GeKmVeMDKAj248MCgYEA+IOC +OKVLSGBVbhqPahvSDVbJjPHzp76CIALYavRy7IVbjj/Kw5P0zawNmloznE0BtTWV +o0Nx78dF6WSLbagKAUXgwpFT3ktaBHOePH60Bsrk6V45V8qkspM5kBKw506wKLbD +Tk0C+Z2Uc6eZdAN3+xKb/F5Vh3XI7R4k82FtNBECgYBlg2tUjV9tnpyhiDKP0itr +eu24gCwozQmf40aohNiE4xkPbRelWC0terrd7wRLZhB1a6fGnQn8jCH2nDKfzyjH +/sRtb8zksXu7xtWWLrKzRc947nm6hq9+xBUB3RyzNibtitbUp9rA33Exa9YGzITj +9HvD/YBM5zeWdJtJr/9V/QKBgGYgBP+qTcmsbO8WUyFT1XpN0/3r4ClrDKaDBNTP +J/sywnEunfDJeKycq+pmbxcoPi9tmdTB/qx+w6gp/XJOv+3N/ZN3jXOom5GAweIy +X2D7OB7+7am6SPxprBoc1D36BEJ2+MPQugxCSaNNmK4oTsIK37dSPOux56Qp4x1x +SCNBAoGAD8a2vEMuaaQM78aXLGgOkmlYRRSwxgmAcrkMC4mZtIbQ+5Cwvjowdgme +/g5NRGf4rGfQ6RKEQFpi4nMChFEc+m8EQcCptwt/cIE5csZn8Xcys/Y9K4S1BkI4 +EBE+a9py654NEiFfV/KS5KfA+9syRJKHGLCBVzf7gx0cm2AqGJY= +-----END RSA PRIVATE KEY----- diff --git a/nginx/vhost/rss.conf b/nginx/vhost/rss.conf new file mode 100644 index 0000000..fc73387 --- /dev/null +++ b/nginx/vhost/rss.conf @@ -0,0 +1,59 @@ +upstream rssforever-rss { + server service.rss; +} + +server { + listen 80; + server_name rss.yourdomain.com; + +# return 301 https://rss.yourdomain.com$request_uri; + + location / { + proxy_redirect off; + proxy_pass http://rssforever-rss; + + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Ssl on; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Frame-Options SAMEORIGIN; + + client_max_body_size 100m; + client_body_buffer_size 128k; + + proxy_buffer_size 4k; + proxy_buffers 4 32k; + proxy_busy_buffers_size 64k; + proxy_temp_file_write_size 64k; + } +} + +server { + listen 443 ssl; + server_name rss.yourdomain.com; + gzip on; + + ssl_certificate /etc/nginx/ssl/yourdomain.com.cer; + ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key; + + location / { + proxy_redirect off; + proxy_pass http://rssforever-rss; + + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Ssl on; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Frame-Options SAMEORIGIN; + + client_max_body_size 100m; + client_body_buffer_size 128k; + + proxy_buffer_size 4k; + proxy_buffers 4 32k; + proxy_busy_buffers_size 64k; + proxy_temp_file_write_size 64k; + } +} diff --git a/nginx/vhost/rsshub.conf b/nginx/vhost/rsshub.conf new file mode 100644 index 0000000..53c64fc --- /dev/null +++ b/nginx/vhost/rsshub.conf @@ -0,0 +1,59 @@ +upstream rssforever-rsshub { + server rsshub:1200; +} + +server { + listen 80; + server_name rsshub.yourdomain.com; + +# return 301 https://rsshub.yourdomain.com$request_uri; + + location / { + proxy_redirect off; + proxy_pass http://rssforever-rsshub; + + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Ssl on; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Frame-Options SAMEORIGIN; + + client_max_body_size 100m; + client_body_buffer_size 128k; + + proxy_buffer_size 4k; + proxy_buffers 4 32k; + proxy_busy_buffers_size 64k; + proxy_temp_file_write_size 64k; + } +} + +server { + listen 443 ssl; + server_name rsshub.yourdomain.com; + gzip on; + + ssl_certificate /etc/nginx/ssl/yourdomain.com.cer; + ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key; + + location / { + proxy_redirect off; + proxy_pass http://rssforever-rsshub; + + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Ssl on; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Frame-Options SAMEORIGIN; + + client_max_body_size 100m; + client_body_buffer_size 128k; + + proxy_buffer_size 4k; + proxy_buffers 4 32k; + proxy_busy_buffers_size 64k; + proxy_temp_file_write_size 64k; + } +}