Securing your Ethereum infrastructure is a critical step in maintaining the integrity and privacy of your blockchain interactions. One of the most effective ways to protect your Ethereum JSON-RPC API is by using Nginx as a reverse proxy with HTTP basic authentication. This guide walks you through setting up secure, password-protected access to your Ethereum node’s JSON-RPC endpoint—ensuring only authorized users can interact with it.
Whether you're running a local development node or managing a production-grade Ethereum client, exposing the JSON-RPC interface without protection can lead to unauthorized access, data leaks, or even fund loss if paired with vulnerable setups. By leveraging Nginx, you add a lightweight yet powerful layer of security that’s both easy to implement and highly effective.
Why Protect Your Ethereum JSON-RPC API?
The Ethereum JSON-RPC API allows applications to communicate directly with an Ethereum client (like Geth or OpenEthereum) by sending HTTP requests. While essential for dApp development and blockchain interaction, this interface should never be publicly exposed.
Common risks include:
- Unauthorized account enumeration
- Private key exposure via
personalmethods - High resource consumption from uncontrolled queries
- Potential for abuse in public nodes
👉 Secure your blockchain infrastructure with trusted tools today.
Using Nginx for access control adds a simple username/password gate before any request reaches your Ethereum node—adding a strong first line of defense.
Step-by-Step: Setting Up Nginx Authentication
1. Open the Nginx Configuration File
Begin by accessing your Nginx configuration file using a terminal-based text editor like nano or vim. The main configuration is typically located at:
/etc/nginx/nginx.confAlternatively, site-specific configurations may reside in:
/etc/nginx/conf.d/default.confOpen it with elevated privileges:
sudo nano /etc/nginx/conf.d/default.conf2. Define a Password-Protected Location Block
Inside the http or server block of your configuration, create a new location directive to restrict access to your Ethereum API. Add the following:
location /ethereum {
auth_basic "Restricted Access - Ethereum API";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://localhost:8545;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}Here’s what each line does:
auth_basic: Enables HTTP basic authentication with a custom prompt.auth_basic_user_file: Points to the file storing encrypted credentials.proxy_pass: Forwards authenticated requests to your running Ethereum node (default port: 8545).- The
proxy_set_headerlines preserve client information during forwarding.
This setup ensures all traffic to /ethereum goes through authentication before reaching the actual node.
3. Create the .htpasswd File
You’ll need to generate a secure credentials file using the htpasswd utility. Install it if not already present (part of the apache2-utils package on Ubuntu):
sudo apt-get install apache2-utilsNow create the .htpasswd file and add your first user:
sudo htpasswd -c /etc/nginx/.htpasswd yourusernameReplace yourusername with your desired username. You’ll be prompted to enter and confirm a strong password. The -c flag creates a new file; omit it when adding additional users later.
Ensure the file has proper permissions:
sudo chmod 640 /etc/nginx/.htpasswd
sudo chown www-data:www-data /etc/nginx/.htpasswdThis prevents unauthorized reading while allowing Nginx to access it.
4. Validate and Save Configuration
After editing, save the configuration file and exit your editor (in nano, press Ctrl+X, then Y, then Enter).
Next, test the syntax to catch any errors:
sudo nginx -tIf successful, you’ll see:
nginx: configuration file /etc/nginx/nginx.conf test is successful
👉 Discover how modern platforms simplify secure blockchain access.
5. Reload Nginx to Apply Changes
Apply the updated rules without downtime:
sudo systemctl reload nginxYour Ethereum JSON-RPC API is now accessible only at http://your-server-ip/ethereum, and visitors will be greeted with a login prompt.
To interact with the API programmatically, include credentials in your HTTP requests:
curl -u yourusername:yourpassword -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' http://localhost/ethereumCore Security Best Practices
While HTTP basic auth provides solid protection, consider these enhancements:
- Use HTTPS: Always pair this setup with SSL/TLS encryption using Let's Encrypt or another certificate provider.
- Limit exposed methods: Disable dangerous RPC methods like
eth_sendTransactionorpersonal_signunless absolutely necessary. - Rate limiting: Add rate limits in Nginx to prevent brute-force attacks.
- Firewall rules: Restrict access at the network level using tools like
ufwor cloud firewalls. - Regular audits: Rotate passwords periodically and audit access logs.
Frequently Asked Questions (FAQ)
Q: Can I allow multiple users to access the JSON-RPC API?
A: Yes. Use sudo htpasswd /etc/nginx/.htpasswd anotheruser (without -c) to add more users to the same .htpasswd file.
Q: Is HTTP basic authentication secure enough?
A: It's secure when combined with HTTPS. Without encryption, credentials can be intercepted. Always use TLS in production environments.
Q: What if I forget my password?
A: You can reset it by re-running the htpasswd command for the same user—it will overwrite the old password.
Q: Can I expose other blockchain APIs using this method?
A: Absolutely. This pattern works for any HTTP-based service, including Bitcoin Core, Polygon nodes, or custom dApp backends.
Q: Does this affect performance?
A: The overhead is negligible. Nginx is highly optimized for proxying and authentication tasks, even under heavy load.
Q: Should I expose my node directly or use an API service?
A: Running your own node gives full control and privacy, but requires maintenance. For developers seeking simplicity, managed services offer reliable alternatives.
With this configuration, you've significantly improved the security posture of your Ethereum node. By combining Nginx, basic authentication, and sound operational practices, you ensure that only trusted parties can query or interact with your blockchain environment.
👉 Explore secure, scalable solutions for blockchain developers.
Remember: security is not a one-time task but an ongoing process. Regularly update your software, monitor logs, and stay informed about emerging threats in the Web3 ecosystem.