---
Title: Configure NGINX Instance Manager to use a forward proxy
weight: 2
toc: true
type: how-to
product: NIM
docs:
---
## Overview
This guide explains how to configure NGINX Instance Manager to use a third-party forward proxy for outbound internet access. Many organizations require a proxy for security and compliance, restricting direct internet connections. This feature allows NGINX Instance Manager to send outbound traffic, such as license verification, telemetry, and updates, through a configured HTTP or HTTPS proxy.
---
## Before you begin
Ensure you have:
- NGINX Instance Manager **2.19 or later**
- Access to a configured HTTP or HTTPS forward proxy
- Permissions to modify `/etc/nms/nms.conf`
- Proxy authentication credentials, if required
{{}}
#### Proxy SSL verification
- `proxy_ssl_verify` applies **only when** `proxy_protocol` is set to `https`.
- If not explicitly set, **`proxy_ssl_verify` defaults to `true`**. The proxy’s root CA certificate must be in the system’s trusted CA store for verification to succeed.
- To disable SSL verification, set `proxy_ssl_verify: false` (not recommended).
#### OpenShift limitation for HTTPS forward proxies
On OpenShift, pods run as non-root users, which prevents the use of `update-ca-certificates` or `update-ca-trust` to add custom CA certificates for HTTPS forward proxies. As a result, HTTPS proxy configurations (with or without authentication) may not work if the proxy requires a trusted CA certificate.
**Workarounds:**
- **Recommended**: Use an HTTP proxy instead of HTTPS.
- **Alternative (not recommended)**: Disable certificate verification by setting `proxy_ssl_verify: false`, which allows connections to proxies with untrusted or self-signed certificates.
#### Feature limitations
- **Mutual TLS (mTLS) authentication is not supported.**
- **OpenID Connect (OIDC) authentication is not supported in forward-proxy mode.**
- **OpenTelemetry (OTel) telemetry is not supported in forward-proxy mode.**
{{}}
---
## Proxy configuration parameters
The following table describes the available proxy configuration parameters in `/etc/nms/nms.conf`:
{{}}
| Parameter | Description |
|------------------------|-------------|
| `proxy_enable` | Defines whether NGINX Instance Manager routes outbound traffic through a forward proxy. **Supported values:** `true` (routes certain outbound requests through the proxy) or `false` (sends data directly to servers). |
| `proxy_host` | IP address of the third-party forward proxy. |
| `proxy_port` | Port on which the third-party proxy is running. |
| `proxy_protocol` | Protocol used to interact with the proxy. **Supported values:** `http`, `https`. |
| `proxy_auth_required` | Determines whether authentication is enforced for proxy access. **Supported values:** `true` (proxy requires authentication) or `false` (proxy does not require authentication). |
| `proxy_username` | Username for authentication with the proxy (if `proxy_auth_required: true`). |
| `proxy_password` | Password for authentication with the proxy (if `proxy_auth_required: true`). |
| `proxy_ssl_verify` | Controls SSL certificate verification when `proxy_protocol` is `https`. **Default value:** `true`. **Supported values:** `true` (only trusted proxies allowed) or `false` (allows untrusted/self-signed certificates). |
{{}}
---
## Configure the forward proxy
### VM or bare-metal
In a VM or bare-metal deployment, configure a forward proxy by updating the `nms.conf` file on the NGINX Instance Manager host.
To configure a forward proxy:
1. Edit the `/etc/nms/nms.conf` file.
2. Add or modify the `proxy_config` section to include the proxy configuration:
```yaml
proxy_config:
proxy_enable: true
proxy_host:
proxy_port:
proxy_protocol: [http|https]
proxy_auth_required: [true|false]
proxy_ssl_verify: [true|false]
```
- If the proxy requires authentication, set `proxy_auth_required` to `true`, and add the following fields:
```yaml
proxy_username: ""
proxy_password: ""
```
- Set `proxy_protocol` to either `http` or `https`, depending on your proxy type.
- If not explicitly set, `proxy_ssl_verify` **defaults to `true`**, meaning the proxy must have a valid certificate from a trusted Certificate Authority (CA). Note: This setting applies only when `proxy_protocol` is `https`.
If the proxy uses a self-signed or untrusted certificate, you have two options:
- **Recommended**: Follow the steps in the [Trust proxy certificates](#trust-proxy-certificates-if-required) section to add the proxy's CA certificate to the system's trusted store.
- **Alternative (not recommended)**: Disable SSL verification by setting `proxy_ssl_verify=false`, which allows connections to proxies with untrusted or self-signed certificates.
3. Save the configuration file.
4. Restart NGINX Instance Manager to apply changes:
```shell
sudo systemctl restart nms
```
### Kubernetes
In a Kubernetes deployment, configure a forward proxy by modifying the `nms-conf` ConfigMap.
To edit the ConfigMap, run:
```shell
kubectl edit cm nms-conf -n
```
- Replace `` with the namespace where NGINX Instance Manager is installed.
- Update the `proxy_config` section to match your proxy settings. See the [examples under "Configure the forward proxy"](#configure-the-forward-proxy).
### Docker Compose
If you’re deploying NGINX Instance Manager with Docker Compose, update the `docker-compose.yaml` file to configure a forward proxy.
1. **Before you begin**: Follow the [Docker Compose deployment guide]({{< ref "nim/deploy/docker/deploy-nginx-instance-manager-docker-compose.md" >}}) to set up Docker for the NGINX container registry. The deployment guide also covers additional environment variables you may want to consider before deployment.
2. {{}} {{}}
3. Update `docker-compose.yaml` with the proxy settings:
Modify the `services.nim.environment` section to include the proxy configuration:
```yaml
services:
nim:
image: private-registry.nginx.com/nms/nim-standalone-compose:
depends_on:
clickhouse:
condition: service_healthy
hostname: nim
ports:
- 443:443
networks:
- external_network
- clickhouse
environment:
- PROXY_ENABLE=true
- PROXY_HOST=
- PROXY_PORT=
- PROXY_PROTOCOL=[http|https]
- PROXY_AUTH_REQUIRED=[true|false]
- PROXY_SSL_VERIFY=[true|false]
volumes:
- nim-data:/data
- proxy-certs:/usr/local/share/ca-certificates
- ./:/usr/local/share/ca-certificates/
```
- If the proxy requires authentication, set `PROXY_AUTH_REQUIRED` to `true`, and add the following fields:
```yaml
- PROXY_AUTH_USERNAME=
- PROXY_PASSWORD=
```
- Replace `` with the filename of the proxy CA certificate.
- Set `PROXY_PROTOCOL` to either `http` or `https`, depending on your proxy type.
- If not explicitly set, **`PROXY_SSL_VERIFY` defaults to `true`**, meaning the proxy must have a valid certificate issued by a trusted Certificate Authority (CA). Note: This setting applies only when `PROXY_PROTOCOL` is `https`.
If the proxy uses a self-signed or untrusted certificate, you have two options:
- **Recommended**: Follow the steps in the [Trust proxy certificates](#trust-proxy-certificates-if-required) section to add the proxy's CA certificate to the system's trusted store.
- **Alternative (not recommended)**: Disable SSL verification by setting `PROXY_SSL_VERIFY=false`, which allows connections to proxies with untrusted or self-signed certificates.
4. Deploy NGINX Instance Manager:
```shell
docker compose up -d
```
---
## Trust proxy certificates (if required)
If your proxy uses HTTPS and `proxy_ssl_verify` is set to `true`, NGINX Instance Manager expects the proxy’s CA certificate to be trusted. If the proxy certificate is self-signed or issued by an untrusted Certificate Authority (CA), you must manually add it to the system’s trusted store.
{{}}For Kubernetes deployments, perform these steps inside the **integrations pod**.{{}}
1. Copy the proxy CA certificate into the system’s trusted certificate directory. The path varies by distribution:
- **Debian/Ubuntu**: `/usr/local/share/ca-certificates/`
- **RHEL/CentOS**: `/etc/ssl/certs/`
2. Run the appropriate command to update the system’s trusted certificates:
- **Debian/Ubuntu**:
```bash
sudo update-ca-certificates
```
- **RHEL/CentOS**:
```bash
sudo update-ca-trust
```
3. Apply the changes:
- **VM/bare-metal**: Restart NGINX Instance Manager:
```bash
sudo systemctl restart nms
```
- **Kubernetes**: Restart the **integrations pod**.
---
## Verify proxy connectivity
After applying the configuration, verify that NGINX Instance Manager is using the proxy:
- **Check system logs:** Review logs for messages confirming that traffic is being routed through the proxy. The exact log message may vary but should indicate the configured proxy details.
- **Test outbound connectivity:** Use a tool such as `curl` or `wget` to confirm that requests are routed through the proxy. The exact command depends on your proxy configuration.
- **Monitor network traffic:** If needed, use network debugging tools like `tcpdump` or `netstat` to verify that outbound requests are sent through the proxy.
If proxy traffic is not working as expected, review the [troubleshooting section](#troubleshoot-common-issues) for possible causes.
---
## Troubleshoot common issues
{{}}
| **Issue** | **Log Message** | **Possible Cause** | **Resolution** |
|-----------|---------------|---------------------|--------------|
| **Authentication failed** | N/A | Incorrect proxy credentials. | Double-check `proxy_username` and `proxy_password`. |
| **Invalid proxy configuration** | `Error: failed to initialize LLM:` `invalid forward proxy config: ` | The proxy configuration section is missing or improperly formatted. | - Ensure the proxy configuration is correct in `/etc/nms/nms.conf`. - Verify all required parameters (`proxy_enable`, `proxy_host`, `proxy_port`, `proxy_protocol`) are set. |
| **Proxy initialization failure** | `unable to add proxy support,` `err - ` | The proxy settings are misconfigured, or the proxy service is unavailable. | - Ensure that the proxy service is running and accessible. - Verify that `proxy_enable` is set to `true` and all required parameters are correctly configured. |
| **Proxy not reachable** | N/A | Incorrect proxy IP or port. | Verify `proxy_host` and `proxy_port` in `/etc/nms/nms.conf`. |
| **TLS certificate verification error** | `proxyconnect tcp: tls:` `failed to verify certificate:` `x509: certificate signed by unknown authority` | SSL verification is enabled (default), but the proxy certificate is untrusted. | - Add the proxy’s CA certificate to the system’s trusted CA store. - If necessary, disable SSL verification by setting proxy SSL verify to false (not recommended). |
{{}}