html
Closing port 80 while keeping port 443 active is not only possible but recommended for security-focused web applications. Here's a technical breakdown:
Nginx configuration:
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
# SSL configuration and other directives
}
Apache configuration:
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
# SSL configuration and other directives
</VirtualHost>
When implementing HTTPS-only access:
- Ensure HSTS (HTTP Strict Transport Security) is properly configured
- Implement proper certificate management with Let's Encrypt or other CA
- Consider using TLS 1.2/1.3 exclusively
While closing port 80 enhances security, consider:
| Issue | Solution |
|---|---|
| HTTP->HTTPS redirects | Implement at application level if needed |
| Browser compatibility | Ensure all clients support HTTPS |
| Monitoring challenges | Configure alerts for SSL certificate expiration |
AWS Security Group configuration for HTTPS-only access:
aws ec2 authorize-security-group-ingress \
--group-id sg-903004f8 \
--protocol tcp \
--port 443 \
--cidr 0.0.0.0/0
aws ec2 revoke-security-group-ingress \
--group-id sg-903004f8 \
--protocol tcp \
--port 80 \
--cidr 0.0.0.0/0
Essential monitoring checks for HTTPS-only setups:
#!/bin/bash # Check SSL certificate expiration openssl s_client -connect example.com:443 2>&1 | \ openssl x509 -noout -dates # Verify port 80 is closed nc -zv example.com 80
html
When hardening web server security, closing port 80 (HTTP) while keeping port 443 (HTTPS) active is technically feasible and increasingly recommended for applications where:
- No HTTP-to-HTTPS redirection is required
- All clients can be guaranteed to support HTTPS
- SEO considerations are irrelevant
For Nginx:
server {
listen 80;
server_name example.com;
return 444; # Close connection immediately
}
server {
listen 443 ssl;
server_name example.com;
# SSL configuration and other directives...
}
For Apache:
<VirtualHost *:80>
ServerName example.com
Redirect 403 /
ErrorDocument 403 "HTTP access disabled"
</VirtualHost>
<VirtualHost *:443>
# HTTPS configuration
</VirtualHost>
While the security benefits are clear, be aware of these technical consequences:
- Browser address bar entries defaulting to HTTP won't work
- Certain API clients may fail without explicit HTTPS URLs
- Monitoring tools may flag the closed port as a potential issue
For environments requiring more flexibility:
# Minimal HTTP port 80 configuration for redirection only
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
For maximum security, combine application configuration with OS-level controls:
# Linux iptables example iptables -A INPUT -p tcp --dport 80 -j DROP iptables -A INPUT -p tcp --dport 443 -j ACCEPT
After implementation, verify with:
curl -I http://example.com # Should fail curl -I https://example.com # Should succeed nmap -p 80,443 example.com # Port scanning verification