Please use this template for troubleshooting questions.
My issue:
Frequently crashing, hardly runs more than 12hrs without any load. Can’t find the exact issue, nginx was functioning properly non stop for years.
nginx is the frontend login page for application running in tomcat9, tomcat9 and application are still running. whenever nginx crash, need to manually start the service.
This server do not have any other applications that require port 80 and 443.
systemctl status nginx.service
× nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Tue 2026-03-24 03:58:05 IST; 9h ago
Docs: man:nginx(8)
Process: 15027 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 15028 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)
CPU: 41ms
Mar 24 03:58:04 nginx[15028]: nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Unknown error)
Mar 24 03:58:04 nginx[15028]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Unknown error)
Mar 24 03:58:04 nginx[15028]: nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Unknown error)
Mar 24 03:58:04 nginx[15028]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Unknown error)
Mar 24 03:58:05 nginx[15028]: nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Unknown error)
Mar 24 03:58:05 nginx[15028]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Unknown error)
Mar 24 03:58:05 nginx[15028]: nginx: [emerg] still could not bind()
Mar 24 03:58:05 systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
Mar 24 03:58:05 systemd[1]: nginx.service: Failed with result ‘exit-code’.
Mar 24 03:58:05 systemd[1]: Failed to start A high performance web server and a reverse proxy server.
How I encountered the problem:
Solutions I’ve tried:
ran ubuntu updates, including security.
Version of NGINX or NGINX adjacent software (e.g. NGINX Gateway Fabric):
nginx/1.18.0 (Ubuntu)
Deployment environment:
on-prem, production.
Minimal NGINX config to reproduce your issue (preferably running on https://tech-playground.com/playgrounds/nginx for ease of debugging, and if not as a code block): (Tip → Run nginx -T to print your entire NGINX config to your terminal.)
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# configuration file /etc/nginx/nginx.conf:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
client_max_body_size 300m;
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
# configuration file /etc/nginx/modules-enabled/50-mod-http-geoip2.conf:
load_module modules/ngx_http_geoip2_module.so;
# configuration file /etc/nginx/modules-enabled/50-mod-http-image-filter.conf:
load_module modules/ngx_http_image_filter_module.so;
# configuration file /etc/nginx/modules-enabled/50-mod-http-xslt-filter.conf:
load_module modules/ngx_http_xslt_filter_module.so;
# configuration file /etc/nginx/modules-enabled/50-mod-mail.conf:
load_module modules/ngx_mail_module.so;
# configuration file /etc/nginx/modules-enabled/50-mod-stream.conf:
load_module modules/ngx_stream_module.so;
# configuration file /etc/nginx/modules-enabled/70-mod-stream-geoip2.conf:
load_module modules/ngx_stream_geoip2_module.so;
# configuration file /etc/nginx/mime.types:
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
image/svg+xml svg svgz;
image/webp webp;
application/font-woff woff;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.wap.wmlc wmlc;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
application/vnd.openxmlformats-officedocument.wordprocessingml.document docx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx;
application/vnd.openxmlformats-officedocument.presentationml.presentation pptx;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}
# configuration file /etc/nginx/sites-enabled/<removed>.conf:
server {
root /var/www/html;
index index.nginx-debian.html;
server_name <removed>;
location /jump/ {
proxy_pass http://localhost:8080;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
client_max_body_size 1g;
access_log off;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/<removed>-0001/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/<removed>-0001/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
add_header Strict-Transport-Security "max-age=31536000" always; # managed by Certbot
}
server {
if ($host = <removed>) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 default_server;
root /var/www/html;
index index.nginx-debian.html;
server_name <removed>;
location /jump/ {
proxy_pass http://localhost:8080;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
client_max_body_size 1g;
access_log off;
}
}
# configuration file /etc/letsencrypt/options-ssl-nginx.conf:
# This file contains important security parameters. If you modify this file
# manually, Certbot will be unable to automatically provide future security
# updates. Instead, Certbot will print and log an error message with a path to
# the up-to-date file that you will need to refer to when manually updating
# this file. Contents are based on https://ssl-config.mozilla.org
ssl_session_cache shared:le_nginx_SSL:10m;
ssl_session_timeout 1440m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
NGINX access/error log: (Tip → You can usually find the logs in the /var/log/nginx directory.)
error.log
2026/03/24 03:57:23 [notice] 14991#14991: signal process started
2026/03/24 03:57:23 [error] 14991#14991: invalid PID number "" in "/run/nginx.pid"
2026/03/24 03:57:35 [notice] 15000#15000: signal process started
2026/03/24 03:57:47 [notice] 15008#15008: signal process started
2026/03/24 03:58:01 [notice] 15014#15014: signal process started
2026/03/24 03:58:03 [emerg] 15028#15028: bind() to 0.0.0.0:443 failed (98: Unknown error)
2026/03/24 03:58:03 [emerg] 15028#15028: bind() to 0.0.0.0:80 failed (98: Unknown error)
2026/03/24 03:58:03 [emerg] 15028#15028: bind() to 0.0.0.0:443 failed (98: Unknown error)
2026/03/24 03:58:03 [emerg] 15028#15028: bind() to 0.0.0.0:80 failed (98: Unknown error)
2026/03/24 03:58:03 [emerg] 15028#15028: bind() to 0.0.0.0:443 failed (98: Unknown error)
2026/03/24 03:58:03 [emerg] 15028#15028: bind() to 0.0.0.0:80 failed (98: Unknown error)
2026/03/24 03:58:03 [emerg] 15028#15028: bind() to 0.0.0.0:443 failed (98: Unknown error)
2026/03/24 03:58:03 [emerg] 15028#15028: bind() to 0.0.0.0:80 failed (98: Unknown error)
2026/03/24 03:58:03 [emerg] 15028#15028: bind() to 0.0.0.0:443 failed (98: Unknown error)
2026/03/24 03:58:03 [emerg] 15028#15028: bind() to 0.0.0.0:80 failed (98: Unknown error)
2026/03/24 03:58:03 [emerg] 15028#15028: still could not bind()
2026/03/24 03:58:06 [alert] 14993#14993: unlink() "/run/nginx.pid" failed (2: No such file or directory)
access.log is empty.
Any help to resolve this appreciated, Thanks.