Skip Navigation
Show nav
Heroku Dev Center Dev Center
  • Get Started
  • Documentation
  • Changelog
  • Search
Heroku Dev Center Dev Center
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
    • .NET
  • Documentation
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log in or Sign up
View categories

Categories

  • Heroku Architecture
    • Compute (Dynos)
      • Dyno Management
      • Dyno Concepts
      • Dyno Behavior
      • Dyno Reference
      • Dyno Troubleshooting
    • Stacks (operating system images)
    • Networking & DNS
    • Platform Policies
    • Platform Principles
    • Buildpacks
  • Developer Tools
    • Command Line
    • Heroku VS Code Extension
  • Deployment
    • Deploying with Git
    • Deploying with Docker
    • Deployment Integrations
  • Continuous Delivery & Integration (Heroku Flow)
    • Continuous Integration
  • Language Support
    • Node.js
      • Node.js Behavior in Heroku
      • Troubleshooting Node.js Apps
      • Working with Node.js
    • Ruby
      • Rails Support
        • Working with Rails
      • Working with Bundler
      • Working with Ruby
      • Ruby Behavior in Heroku
      • Troubleshooting Ruby Apps
    • Python
      • Working with Python
      • Background Jobs in Python
      • Python Behavior in Heroku
      • Working with Django
    • Java
      • Java Behavior in Heroku
      • Working with Java
      • Working with Maven
      • Working with Spring Boot
      • Troubleshooting Java Apps
    • PHP
      • Working with PHP
      • PHP Behavior in Heroku
    • Go
      • Go Dependency Management
    • Scala
    • Clojure
    • .NET
      • Working with .NET
  • Databases & Data Management
    • Heroku Postgres
      • Postgres Basics
      • Postgres Getting Started
      • Postgres Performance
      • Postgres Data Transfer & Preservation
      • Postgres Availability
      • Postgres Special Topics
      • Migrating to Heroku Postgres
    • Heroku Key-Value Store
    • Apache Kafka on Heroku
    • Other Data Stores
  • AI
    • Working with AI
    • Heroku Inference
      • Heroku Inference Quick Start Guides
      • Inference Essentials
      • Inference API
      • AI Models
    • Tool Use
    • Vector Database
    • AI Integrations
  • Monitoring & Metrics
    • Logging
  • App Performance
  • Add-ons
    • All Add-ons
  • Collaboration
  • Security
    • App Security
    • Identities & Authentication
      • Single Sign-on (SSO)
    • Private Spaces
      • Infrastructure Networking
    • Compliance
  • Heroku Enterprise
    • Enterprise Accounts
    • Enterprise Teams
  • Patterns & Best Practices
  • Extending Heroku
    • Platform API
    • App Webhooks
    • Heroku Labs
    • Building Add-ons
      • Add-on Development Tasks
      • Add-on APIs
      • Add-on Guidelines & Requirements
    • Building CLI Plugins
    • Developing Buildpacks
    • Dev Center
  • Accounts & Billing
  • Troubleshooting & Support
  • Integrating with Salesforce
    • Heroku AppLink
      • Getting Started with Heroku AppLink
      • Working with Heroku AppLink
      • Heroku AppLink Reference
    • Heroku Connect (Salesforce sync)
      • Heroku Connect Administration
      • Heroku Connect Reference
      • Heroku Connect Troubleshooting
    • Other Salesforce Integrations
  • Add-ons
  • All Add-ons
  • Express Nodes Dedicated IP
Express Nodes Dedicated IP

This add-on is operated by Express Nodes

High-Quality Dedicated IPs (HTTPs/SOCKS5) | Unlimited Bandwidth for $300

Express Nodes Dedicated IP

Last updated October 13, 2025

The Express Nodes Dedicated IP add-on is currently in beta.

Table of Contents [expand]

  • Key Features
  • Provisioning the Add-on
  • View Assigned IPs
  • Test Your IP Connection
  • Dashboard Overview
  • Local Setup
  • Use With Ruby
  • Use with Python
  • Use with PHP
  • Migrating Between Plans
  • Removing The Add-on
  • FAQs
  • Support

Express Nodes Dedicated IP is an add-on that empowers your Heroku applications with two static, dedicated IP addresses for outbound traffic. With both IPs equal in quality and performance, you have the flexibility to balance your requests or use one as a fallback.

Whether you choose the Test plan with 10GB of bandwidth and shared static IPs, or the Unlimited plan with unlimited bandwidth and fully dedicated static IPs, your app always benefits from high-quality, fresh, and cooled-down IPs. In addition, the IPs supports HTTP and SOCKSv5 protocols, making it compatible with virtually any language or framework.

Key Features

  1. Two IPs per plan: Ensure redundancy and failover.
  2. High-quality IPs: Corporate level IPs - Fresh, cooled-down IPs.
  3. Protocol support: HTTP and SOCKS5.

Provisioning the Add-on

To get started, add Express Nodes Dedicated IP to your Heroku application using the CLI.

For the Unlimited plan (2 dedicated static IPs, unlimited bandwidth), run:

heroku addons:create dedicatedip:unlimited --app your-app-name

For the Test plan (2 shared static IPs, 10GB bandwidth), run:

heroku addons:create dedicatedip:test --app your-app-name

After successful provisioning, this message displays:

IPs Provisioned Successfully
Created dedicatedip as DEDICATED_IP_HTTP_PROXY_1, DEDICATED_IP_HTTP_PROXY_2, DEDICATED_IP_SOCKS_PROXY_1, DEDICATED_IP_SOCKS_PROXY_2

After installing the add-on, the application is fully integrated with the add-on.

View Assigned IPs

Run this command to view the details of IPs provisioned to your app:

heroku config --app your-app-name

Test Your IP Connection

Run the following command to open an interactive bash session for your Heroku app

heroku run bash --app your-app-name

Within the bash session, run the following command to test the connection:

curl -x "$DEDICATED_IP_HTTP_PROXY_1" https://ipinfo.io

Dashboard Overview

We provide an easy to use dashboard so you can mange your services and IPs. Here’s how you can log into the dashboard:

heroku addons:open dedicatedip --app your-app-name

We use Heroku’s SSO which automatically logs you into our dashboard.

Local Setup

To ensure your development environment accurately mirrors production, replicate the Express Nodes Dedicated IP configuration locally. Environment parity enables you to test your app against our proxy service without needing to deploy every change.

Environment Setup

Express Nodes Dedicated IP adds several config variables to your Heroku app, as noted in the message shown after provisioning. These variables include:

  • DEDICATED_IP_HTTP_PROXY_1
  • DEDICATED_IP_SOCKS_PROXY_1
  • DEDICATED_IP_HTTP_PROXY_2
  • DEDICATED_IP_SOCKS_PROXY_2

You can use the Heroku Local command-line tool to set up your development environment. Heroku Local reads configuration variables from a .env file, so you should replicate the necessary variables locally. Run the following commands to append each variable to your .env file:

heroku config:get --app your-app-name DEDICATED_IP_HTTP_PROXY_1 -s >> .env
heroku config:get --app your-app-name DEDICATED_IP_SOCKS_PROXY_1 -s >> .env
heroku config:get --app your-app-name DEDICATED_IP_HTTP_PROXY_2 -s >> .env
heroku config:get --app your-app-name DEDICATED_IP_SOCKS_PROXY_2 -s >> .env

Never commit credentials and other sensitive configuration values to source control. To prevent accidental commits, add the .env file to your .gitignore file:

echo .env >> .gitignore

Use With Ruby

Here’s a simple example using Ruby’s built-in Net::HTTP library, no additional gems required. This snippet demonstrates how to route your outbound requests via Express Nodes Dedicated IP using the HTTP proxy.

#!/usr/bin/env ruby

require 'net/http'
require 'uri'

# Parse the proxy URL from the environment variable.
proxy_uri = URI.parse(ENV['DEDICATED_IP_HTTP_PROXY_1'])

# Create an HTTP object that uses the proxy.
http = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port, proxy_uri.user, proxy_uri.password)

# Specify the target URL.
uri = URI.parse('http://ipinfo.io/')

begin
  puts "Connecting through proxy: #{proxy_uri.host}:#{proxy_uri.port}..."

  # Send the GET request via the proxy.
  response = http.get_response(uri)

  if response.is_a?(Net::HTTPSuccess)
    puts "Connection successful!"
    puts "Your IP is: #{response.body.strip}"
  else
    puts "Error: HTTP #{response.code} - #{response.message}"
  end
rescue => e
  puts "Error occurred: #{e.class} - #{e.message}"
end

Set the appropriate environment variable, DEDICATED_IP_HTTP_PROXY_1, in your Heroku app configuration or local environment, and you’re ready to go. This minimal setup ensures that your Ruby application can reliably route its requests through our static IPs without any extra dependencies.

Use with Python

Express Nodes Dedicated IP works seamlessly with Python’s popular HTTP libraries. Here are a few examples to help you get started without any extra dependencies.

Using the Requests Library

You can specify the proxy URLs directly using a proxy dictionary:

import os
import requests

# Create a proxy dictionary using the environment variables.
proxies = {
    "http": os.getenv('DEDICATED_IP_HTTP_PROXY_1')
}

# Make a request through the proxy.
response = requests.get("http://ipinfo.io/ip", proxies=proxies)
print("Your IP is:", response.text.strip())

Alternatively, set the proxy globally so all requests automatically use it:

import os
import requests

# Set global proxy environment variables.
os.environ['http_proxy'] = os.getenv('DEDICATED_IP_HTTP_PROXY_1')

# Any subsequent requests use the defined proxies.
response = requests.get("http://ipinfo.io/ip")
print("Your IP is:", response.text.strip())

Use with PHP

Express Nodes Dedicated IP integrates with PHP using cURL. Here are examples for both HTTP and SOCKS5 proxies.

HTTP Proxy with PHP cURL

Use the following PHP code to send a request via our HTTP proxy:

<?php
function proxyRequest() {
    // Get the HTTP proxy URL from the environment variable.
    $proxy = getenv("DEDICATED_IP_HTTP_PROXY_1");

    // Initialize cURL with the target URL.
    $ch = curl_init("https://ipinfo.io/ip");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // Set the proxy for the cURL request.
    curl_setopt($ch, CURLOPT_PROXY, $proxy);

    // Execute the request.
    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

$response = proxyRequest();
print($response);
?>

SOCKS5 Proxy with PHP cURL

Use the following PHP code to send a request via our SOCKS5 proxy:

<?php
function proxyRequest() {
    // Get the SOCKS5 proxy URL from the environment variable.
    $proxy = getenv("DEDICATED_IP_SOCKS_PROXY_1");

    // Initialize cURL with the target URL.
    $ch = curl_init("https://ipinfo.io/ip");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // Set the proxy for the cURL request.
    curl_setopt($ch, CURLOPT_PROXY, $proxy);
    curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);

    // Execute the request.
    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

$response = proxyRequest();
print($response);
?>

Migrating Between Plans

You can upgrade or downgrade your Express Nodes Dedicated IP plan by passing the plan name with the Heroku CLI. For example:

To upgrade to the Unlimited plan:

If you upgrade your plan from Test to other plans, you get new dedicated IPs as the Test plan has shared IPs. Your IPs remain unchanged when migrating between paid plans.

heroku addons:upgrade dedicatedip:unlimited --app your-app-name

To downgrade to Test plan:

If you downgrade from a paid plan to the Test plan, you lose your dedicated IPs and your app gets assigned shared IPs. The Test plan is only meant for testing the add-on.

heroku addons:upgrade dedicatedip:test --app your-app-name

You can only subscribe to the Test plan once per application to avoid any abuse of our service.

Removing The Add-on

Run this command to remove the add-on.

When you remove the add-on, the IPs provisioned to your app terminate, which can affect your application if you configured proxies for use in scripts or outbound requests.

heroku addons:destroy dedicatedip --app your-app-name

FAQs

Can I access external databases like MySQL or Postgres?

Yes, you can connect to external databases using the proxy.

Can I allowlist my IP elsewhere?

Absolutely, if you’re on a paid plan. Since paid plans have static IPs dedicated to you, it’s perfect for firewall allowlisting, database access, API restrictions, and more. It’s ideal to allowlist both IPs simultaneously so if there’s a need to change one IP, you’re not locked out. It’s not recommended to allowlist IPs if you’re on the Test plan.

Support

You’re covered with premium support. If you have any issues related to the service, or if you want to understand more about the IPs and services, Express Nodes’ award-winning support team is always there to help. Reach out to hello@expressnodes.com.

Keep reading

  • All Add-ons

Feedback

Log in to submit feedback.

Zara 4 FileTurn

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure
  • .NET

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing
  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Github
  • LinkedIn
  • © 2025 Salesforce, Inc. All rights reserved. Various trademarks held by their respective owners. Salesforce Tower, 415 Mission Street, 3rd Floor, San Francisco, CA 94105, United States
  • heroku.com
  • Legal
  • Terms of Service
  • Privacy Information
  • Responsible Disclosure
  • Trust
  • Contact
  • Cookie Preferences
  • Your Privacy Choices