---
title: "RSS Full Text"
date: 2025-07-01
tags: ["service"]
icon: "rss.svg"
short_desc: "Creates RSS full text feeds."
---
[fivefilters full-text-rss](https://www.fivefilters.org/full-text-rss/)
is Full-Text RSS service. Free open source RSS feeds usually provide
the summary or limited lines of URL contents. There is a way to see
the entire web page with text-based web browser such as lynx, w3m, and so on.
However, I want to do everything in [newsboat](https://github.com/newsboat/newsboat).
With this, you can retrieve the full-text of individual articles or
complete full-text RSS feeds. It enriches third-party RSS feeds with
full text articles.
## Installation
### Setting Up and Configuring
Check PHP version (e.g., php7.4-fpm). Adjust in later steps accordingly.
```sh
sudo apt update
sudo apt install nginx php php-fpm php-tidy git unzip certbot python3-certbot-nginx
```
Download Full-Text RSS
```sh
cd /var/www
sudo git clone https://bitbucket.org/fivefilters/full-text-rss.git
cd full-text-rss
sudo git reset --hard 384d52fd83361ffd6e7f28bd39b322970a015a28
```
Download Full-Text-RSS site config
```sh
sudo git clone https://github.com/fivefilters/ftr-site-config site_config
```
Set permissions:
```sh
sudo mkdir -p cache/rss
sudo chown -R www-data:www-data cache site_config
sudo chmod -R 777 cache site_config
```
### Configuring nginx & cerbot
Create Nginx Config with Clean /feed + Rate Limiting
Create a new site config:
```sh
sudo nano /etc/nginx/sites-available/fulltextrss
```
Paste this (adjust php7.4-fpm.sock if needed):
```nginx
# Rate limiting zone: 10 req/min per IP
limit_req_zone $binary_remote_addr zone=ratelimit:10m rate=10r/m;
server {
listen 80;
server_name rss.thesiah.xyz; # Change to your domain
root /var/www/full-text-rss;
index index.php;
# Rewrite clean URL /feed?url=... to makefulltextfeed.php
location /feed {
rewrite ^/feed$ /makefulltextfeed.php last;
limit_req zone=ratelimit burst=5;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
```
Enable nginx on the site:
```sh
sudo ln -s /etc/nginx/sites-available/fulltextrss /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
```
Secure with HTTPS (Certbot)
```sh
sudo certbot --nginx -d rss.thesiah.xyz
```
### Custom Config
Add custom_config.php:
Save to: /var/www/full-text-rss/custom_config.php
```php
enabled = true;
$options->debug = true;
$options->default_entries = 200;
$options->max_entries = 1000;
$options->content = 'user';
$options->summary = 'user';
$options->rewrite_relative_urls = true;
$options->exclude_items_on_fail = 'user';
$options->singlepage = true;
$options->multipage = true;
$options->caching = true;
$options->cache_time = 120;
$options->cache_dir = dirname(__FILE__).'/cache';
$options->message_to_prepend = '';
$options->message_to_append = '';
$options->error_message = '[unable to retrieve full-text content]';
$options->keep_enclosures = true;
$options->detect_language = 'user';
$options->user_submitted_config = false;
$options->remove_native_ads = false;
$options->admin_credentials = array('username'=>'admin', 'password'=>getenv('FTR_ADMIN_PASSWORD'));
$options->allowed_urls = array();
$options->blocked_urls = array();
$options->key_required = false;
$options->api_keys = array();
$options->default_entries_with_key = 5;
$options->max_entries_with_key = 10;
$options->xss_filter = 'user';
$options->favour_feed_titles = 'user';
$options->allowed_parsers = array('libxml', 'html5php');
$options->allow_parser_override = true;
$options->cors = false;
$options->proxy_servers = array();
$options->proxy = true;
$options->allow_proxy_override = true;
$options->apc = true;
$options->smart_cache = true;
$options->fingerprints = array(
' array('hostname'=>'fingerprint.posterous.com', 'head'=>true),
' array('hostname'=>'fingerprint.blogspot.com', 'head'=>true),
' array('hostname'=>'fingerprint.blogspot.com', 'head'=>true),
''admin', 'password'=>'');
}
} elseif ($_env === 'true' || $_env === 'false') {
$_val = ($_env === 'true');
} elseif (is_numeric($_env)) {
$_val = (int)$_env;
$_val = $_env;
}
}
}
unset($_key, $_val, $_env);
}
```
### Local host
Visit http://localhost:80 for the integrated web UI
{{
}}
Article extraction: http://localhost/extract.php?url=[url]
Feed conversion: http://localhost/makefulltextfeed.php?url=[url]