Driver FixRecommendedSound, Wi-Fi or graphics acting up? Check drivers firstFind missing or outdated drivers fast.Check DriversOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsClean PCRecommendedOne scan can reveal what keeps slowing WindowsLook for cleanup and repair opportunities.Run Scan×
Skip to content
World desk9 min

How to Fix Nginx Unable to Bind to Port 443

An nginx bind failure on port 443 is usually either a socket conflict (error 98) or a privilege denial (error 13). Learn how to identify the owner, repair permissions, handle containers and security policies, update HTTPS syntax, and validate safely.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

When nginx cannot bind to HTTPS port 443, the error code tells you which repair to make. (98: Address already in use) means another process already owns the socket; identify it and stop it, move it, or place nginx in front of it. (13: Permission denied) means nginx lacks permission to open the privileged port, commonly because it was started without a privileged master process or is being confined by a container, SELinux, or AppArmor. Diagnose the exact message first, then test the configuration with sudo nginx -t before restarting.

Read the bind error before changing anything

Look at the nginx error output or the systemd journal and copy the complete line. The number in parentheses is more useful than the surrounding wording.

As an Amazon Associate I earn from qualifying purchases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Message Meaning First action
bind() to 0.0.0.0:443 failed (98: Address already in use) Another process has already bound IPv4 port 443, or another nginx worker/master instance is competing for it. Find the listener with ss or lsof, then stop or move the conflicting service.
bind() to 0.0.0.0:443 failed (13: Permission denied) The process is not allowed to open a privileged port below 1024. A security policy can produce the same symptom. Run nginx with a privileged master process, grant a narrowly scoped capability, or publish a high container port.
Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use A container runtime could not publish host port 443 because it is already occupied. Identify the host listener and the container publishing it; change one host-port mapping.

Do not treat these as interchangeable errors. Killing random processes for a permission error will not help, and changing file permissions will not free a socket held by another service.

Collect a safe baseline

Run these checks before editing configuration. Use sudo so the process and PID columns are visible.

#1 Best Overall
Sale
TOZO A1 Wireless Earbuds Bluetooth 5.3 Light Weight in Ear Headphones | IPX5 Waterproof,2 Mics for AI Calls,Immersive Premium Sound Bass Headset with Charging Case,32 EQ via App Black
  • [Ultra-Lightweight Ear Buds Designed for Small Ears] Each earbud weighs only 3.7g and features a compact, ergonomic in-ear design made especially for small ears. Secure, low-profile, and comfortable for workouts, all-day wear or overnight sleeping.The ultra-slim profile sits flush in your ear with no hard edges poking or rubbing, so you can even sleep on your side without discomfort.
  • [Immersive Stereo Sound with TOZO OrigX Technology] TOZO OrigX tuning delivers clear vocals, balanced mids, and natural stereo sound for music, podcasts, and videos.
  • [Long Battery Life for Daily Use] Get up to 7 hours of playtime on a single charge, with up to 32 hours total using the charging case—ideal for workdays, commuting, and extended listening sessions.
  • [Bluetooth 5.3 & Stable Connection] Bluetooth 5.3 provides fast pairing, stable wireless performance, and reduced dropouts as you move around home or office.
  • [Deep Bass with Clear Vocals] High-performance drivers produce punchy bass while keeping vocals clean and detailed for everyday listening.
  1. Check nginx’s current service state and recent failure details:
    sudo systemctl status nginx --no-pager
    sudo journalctl -u nginx -n 100 --no-pager
  2. Validate syntax without opening port 443:
    sudo nginx -t
    A successful test reports that the syntax is okay and the test is successful. If it reports an unrelated syntax error, fix that first; a clean syntax test does not prove that the port is available.
  3. List listeners on TCP 443:
    sudo ss -tlnp | grep ':443'
    If ss is unavailable, use:
    sudo lsof -nP -iTCP:443 -sTCP:LISTEN
  4. Look for duplicate nginx processes:
    ps aux | grep '[n]ginx'
    systemctl status nginx
  5. Search enabled configuration for every 443 declaration. On distributions that use the usual layout, inspect /etc/nginx/nginx.conf, /etc/nginx/conf.d/, and /etc/nginx/sites-enabled/. Use:
    sudo grep -RIn --include='*.conf' 'listen[[:space:]].*443' /etc/nginx
    This catches an old virtual host or an accidentally enabled file that you no longer use.

Record the command output before stopping anything. It gives you a recovery trail and helps distinguish a host process from a container-published port.

Fix error 98: another process owns port 443

Identify the owner

The listener output normally includes a program name and PID. Typical owners are a second nginx installation, Apache or another web server, a Docker or Podman publish, a reverse-proxy add-on, or a self-hosted application that includes its own HTTPS endpoint. Community reports have found this pattern in home-automation add-ons, Jitsi deployments, and Let’s Encrypt setups.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

If the output shows only a PID, inspect it before terminating it:

sudo ps -fp <PID>
readlink -f /proc/<PID>/exe
sudo systemctl status <service-name>

Replace the angle-bracket values with the actual PID and service name. Do not stop a process merely because its name contains “proxy”; verify what depends on it.

Stop or disable the conflicting service

If the other service is not needed, stop it cleanly through its service manager:

Rank #2
Sale
Smart Watch for Men Women Compatible with iPhone Samsung Android Phone 1.69 inch Full Touch Screen IP68 Waterproof Bluetooh Fitness Tracker Heart Rate/Sleep Monitor (Black)
  • 【IP68 Waterproof Multifunctinal Smart Watch】Torjalph fitness activity tracker smart watch is IP68 waterproof technology ,you can wear it when swimming,handwashing,it's rain-proof which means that you perform multiple exercise modes outside without worrying about sweat or rain corroding your fitness smart watch,and this watch equipped with a 230 mAh large capacity battery magnetic charging ,and this sports activity tracker watch can be used 5-7 days If fully charged.
  • 【Larger 1.83'' Full Screen Watch & Multi-dial Selection】1.83 inch full HD color touch screen smart watch for men / women provides excellent 240*284 resolution image quality ,This Bluetooth smart watch offers a better touch experience and remarkable immersion and ,more than 200 watch faces for you to choose from App"Da Fit ", you can change the dial style according to your mood to wear keeping the world on your wrist
  • 【Accurate Activity Tracker Smart Watch 】sports watch activity tracker uses sweat and dust resistant breathable silicone strap, our Fitness Tracker Smart Watch for Android iOS Phones supports 12 sports modes,walking,running,bicycle,swimming,badminton,basketball,football,rope skipping. This bluetooth calls smart watch for men women is lightweight and stylish, bringing more convenient and relaxing sports experience while also providing more protection.
  • 【Your 24 Hour Personal Daily Health Monitor】Fitness watch for women men full touch screen IP67 waterproof bluetooth smartwatch for Android iOS Phones with heart rate blood pressure monitor multifunction Andriod smart watch with steps counter sleep monitor sports fitness watch, monitoring blood oxygen saturation allows you to understand your physical condition in real time to track fitness progress ,to know your health status in time.
  • 【More Functions Bluetooth Call Smart Watch】This fitness activity smart watch full screen for iPhone and Android phones includes a bunch of new features including:The bluetooth smart watch can hang up the phone, receive and display WhatsAPP /Text /Facebook /Twitter /Messenger reminder.Support sedentary reminder, alarm clock, stopwatch, timer,weather information,music control, remote camera control compatible with Android 5.0 and above or iOS 9.0 and above smartphones.
sudo systemctl stop <service-name>
sudo systemctl disable <service-name>   # only if it must not start at boot
sudo systemctl status <service-name>

After the service releases the socket, validate and start nginx:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
sudo nginx -t
sudo systemctl start nginx
sudo systemctl status nginx --no-pager

Use disable only when you are certain the service should remain off after reboot. If it is a required application, moving it is safer than disabling it.

Move the application behind nginx

A common arrangement is to let nginx be the sole listener on 443 and move the application to an unprivileged local port such as 8080 or 8443. Change the application’s own bind address and port using its documented configuration, then proxy to it from an nginx server block. The application should normally bind to loopback when it is intended to be reachable only through nginx.

server {
    listen 443 ssl;
    server_name example.test;

    ssl_certificate     /etc/ssl/example/fullchain.pem;
    ssl_certificate_key /etc/ssl/example/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        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;
    }
}

The proxy directives shown are a practical example, not a substitute for the upstream application’s own proxy documentation. Confirm that the backend really listens on 127.0.0.1:8080 before reloading nginx.

Resolve duplicate nginx installations or instances

If ss shows nginx as the owner but systemd says the service failed, you may have started a manually installed nginx in addition to the packaged service. Compare the executable paths:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
New Bee Guitar Cable 10ft Electric Instrument Bass AMP Cord
  • [Low Noise High Fidelity] New bee guitar cord with 22AWG oxygen-free-copper center conductors provides enhanced signal transfer, the PVC insulation material and the high-density stranded copper double shield provide noise rejection for quiet operation
  • [Ideal for Choice] New bee 1/4 straight and right angle metal connectors, ensures a secure connection in any instrument, pedal, or amp jack. L shape great fro on stage guitar stands
  • [Wide Compatible] Suitable for mixer, power amplifier, microphone, effector, decoder, equalizer, electoronic organ, electric guitar, electric bass and other electronic equipments. Widely used in the installation of smart home, karaoke speaker, professional stage audio, etc
  • [Easy Disassemble] Making incidental repairs quick and easy! Very nice, flexible cable
  • [Dont Hesite to Order] 24 hours customer services and professional technology team are standing by
command -v nginx
sudo readlink -f "$(command -v nginx)"
ps -o pid,ppid,user,cmd -C nginx

Stop the instance that should not run, using its original startup method. If a stale process remains after a normal stop, inspect the parent PID and journal before using a termination signal. A forced kill can interrupt active connections and can leave a supervisor restarting the same process.

Check IPv4 and IPv6 listeners

An nginx configuration can request both 0.0.0.0:443 and an IPv6 wildcard such as [::]:443. Depending on the operating system’s socket behavior, one wildcard may cover both address families, making a second declaration collide. Keep one intentional listener per address family and remove redundant 443 lines from old virtual-host files. Re-run sudo nginx -t after editing.

Fix error 13: permission denied on a privileged port

Use the normal nginx privilege model

Linux treats ports below 1024 as privileged. The usual nginx package starts a root-owned master process, which opens 443 and then launches worker processes as the less-privileged user configured by the distribution. Check the service definition and process ownership:

sudo systemctl cat nginx
ps -o user,pid,ppid,cmd -C nginx

If you launched nginx directly as an ordinary user, stop that instance and start the packaged service with systemd:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
sudo systemctl stop nginx
sudo nginx -t
sudo systemctl start nginx

Do not make the worker user root just to bypass the error. The safer design is a privileged master with unprivileged workers.

Rank #4
BSIMB 15.6" Digital Family Calendar & Chore Chart, No Subscription Fees
  • Digital Family Calendar: BSIMB digital calendar wall touch screen puts an end to your chaotic life. Designed for busy families, the digital calendar keeps you organised and in step with your family. Assign different colours and tasks to each family member to make family scheduling easier and more intuitive.
  • Easy Setup and Auto-Sync: Plug in, connect to WLAN and auto-syn your electric calendar in minutes. Digital wall calendar compatible with Google calendar, iCloud calendar, Outlook calendar, Cozi calendar and Yahoo calendar. Add events directly on the device or through the ecalendar app. Electronic calendar stays current whether you're at work or traveling—no manual updates needed.
  • All-In-One Home Assistant: Smart calendar builds habits and encourage independence with personalised chores. Display daily meal plan to reduce the daily ‘What's for dinner?’ stress. To-do lists keep track of everything you want. Turning chores into valuable achievements with stars and rewards, making life easier and more enjoyable.
  • Manage Anytime Anywhere: BSIMB electronic calendar for family stay connected with the powerful ecalendar app. Access and manage your digital wall calendar anytime, anywhere with free features like stars & rewards, photo screensaver, chore charts, meals plans, to-do lists etc. Electronic planner paid features like Magic Import tailor advanced tools for users with special needs.
  • Stay in Touch with Loved Ones: Share photos or videos from your phone to electronic wall calendar with app, instantly update your life moment, and keep in touch with your family, especially those who are far away; you can also surprise your smart calendar digital wall by sending him a wish card; it's also great for keeping tech-illiterate elders in touch with the youngsters.

Grant only the bind capability when appropriate

On a system where nginx must start without a root master, Linux can grant the executable the CAP_NET_BIND_SERVICE capability:

sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx
getcap /usr/sbin/nginx

The binary path varies by distribution and by whether nginx was compiled from source. Confirm it with command -v nginx and the resolved path before applying setcap. Package upgrades can replace the binary and remove the capability, so check it again after upgrades. A capability changes the security boundary of that executable; use it only when you understand how the service is started and updated.

Account for SELinux or AppArmor

A mandatory access-control policy can deny a bind even when Unix ownership and capabilities look correct. On SELinux systems, inspect recent denials in the audit log and verify that the port is labeled for web-server use. On AppArmor systems, inspect the profile status and kernel or journal messages for a denied network operation. The exact commands and policy names differ by distribution, so apply the policy through that distribution’s documented administration tools rather than disabling enforcement globally.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

When a policy is the cause, fix the specific port or profile rule, then repeat the bind test. Disabling SELinux or AppArmor is not a durable repair and removes protection unrelated to nginx.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Containers: separate the host port from the container port

A container can listen on 443 internally while the host publishes a different port. In rootless Docker or Podman, publishing a host port below 1024 commonly fails because the runtime lacks the required privilege. Publish a high host port instead, for example 8443:443, and put a host-level reverse proxy on 443 if public HTTPS must remain there.

ports:
  - "8443:443"

If a container runtime reports listen tcp4 0.0.0.0:443: bind: address already in use, the host port is occupied regardless of what port the application uses inside the container. Find the owner on the host with ss or lsof, then inspect published ports:

docker ps --format 'table {{.Names}}t{{.Ports}}'
podman ps --format 'table {{.Names}}t{{.Ports}}'

Stop the old container, change its host mapping, or assign the new container another host port. Do not change only the internal container port while leaving the conflicting host mapping unchanged.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Configure modern nginx HTTPS syntax

The nginx SSL module documents HTTPS with the ssl parameter on the listen directive:

server {
    listen 443 ssl;
    server_name example.test;
    ssl_certificate     /path/to/certificate.pem;
    ssl_certificate_key /path/to/private-key.pem;
}

The standalone ssl on; directive became obsolete in nginx 1.15.0 and was removed in nginx 1.25.1. On current releases, replace it with listen 443 ssl;. Leaving the old directive in a modern configuration causes a syntax failure that can mask the separate bind problem.

Since nginx 1.11.0, ssl_certificate may be specified more than once to load certificates of different types, such as RSA and ECDSA. Each certificate still needs a matching private-key directive. Keep certificate files readable by the nginx master process while restricting private-key permissions according to your distribution’s packaging guidance.

Listen parameters apply to the socket rather than to an individual virtual host. A setting on one server block can therefore affect other server blocks sharing the same address and port. Keep the 443 listener declarations consistent across enabled files, and remove obsolete duplicates instead of trying to override them in a later block.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Validate, reload, and recover safely

  1. Run a configuration test after every edit:
    sudo nginx -t
  2. If the test fails, correct the file and line it names. Do not restart a known-bad configuration.
  3. Once the test succeeds, reload for a configuration-only change:
    sudo systemctl reload nginx
  4. Use a restart when the service was stopped or a binary, capability, or service definition changed:
    sudo systemctl restart nginx
  5. Confirm the listener and service state:
    sudo ss -tlnp | grep ':443'
    sudo systemctl status nginx --no-pager
  6. Test locally with the intended hostname. If DNS is not ready, use a local resolver override or send the correct Host header while testing the actual certificate name.

If a reload fails, nginx normally keeps the previous workers running, but a failed start can leave the site unavailable. Keep the last known-good configuration available, restore it, run sudo nginx -t, and start the service again. Review journalctl -u nginx for the first error rather than the final systemd summary.

Common traps and what they mean

  • Changing certificate files to fix error 98: certificates are read after the socket is created; they do not free an occupied port.
  • Changing ownership to fix error 13: file ownership does not grant permission to bind a privileged port.
  • Editing a disabled file: only files included by the active nginx configuration matter. Confirm the include tree and enabled links.
  • Stopping the wrong web service: identify the PID and its parent service first; another application may be serving production traffic.
  • Using kill -9 immediately: a supervisor may restart the process, and active connections can be dropped. Prefer the service’s graceful stop command.
  • Assuming a firewall caused the bind failure: a firewall can block incoming traffic, but it does not normally produce “address already in use.” Resolve the local bind error first, then troubleshoot reachability.
  • Leaving both old and new HTTPS directives enabled: remove ssl on; on releases where it is obsolete, and keep a single, clear listen 443 ssl; declaration for each intended endpoint.

A compact decision path

  1. Read the exact error number: 98 or 13.
  2. Run sudo ss -tlnp | grep ':443' and identify the owner.
  3. For error 98, stop or move that owner, remove duplicate nginx instances, or change a container’s host-port mapping.
  4. For error 13, restore the root-master model, apply a carefully scoped bind capability if required, or use a high host port in a rootless container.
  5. Check SELinux or AppArmor only when ordinary privilege checks do not explain the denial.
  6. Use listen 443 ssl; rather than the removed ssl on; directive on modern nginx.
  7. Run sudo nginx -t, then reload or restart and verify the listener.

This sequence separates socket ownership, privilege, policy, and configuration problems. Once the process permitted to listen on 443 is intentional and the configuration test passes, nginx can accept HTTPS connections normally.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.