想实现禁止IP访问,http访问跳转https,功能已实现,但是有以下问题
- nginx -t 报 waring
- lissten 80 后面需要加default_server吗?
nginx: [warn] conflicting server name "_" on 0.0.0.0:80, ignored
server {
listen 80;
server_name _;
return 500;
}
server {
listen 80;
server_name www.domain.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name www.domain.com;
# ssl 配置
ssl on;
ssl_certificate 1_.club_bundle.crt;
ssl_certificate_key 2_.club.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
root /www/blog;
index index.html;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
server_name
为_
的这个server是处理请求头里Host字段为空的请求,一般会放在所有规则的最后面,最后被匹配。一般建议直接return 444;
(Nginx非标返回码,意思是直接丢弃请求)。default_server
一般的使用场景,是在多个Host规则都没匹配上时,显式指定一个默认规则适配给请求。如果不加default_server
呢,那么默认会去匹配第一条规则,所以有时想直接把Host没匹配上任何规则的请求直接丢弃时,可以直接加到server_name
为_
的那条server块里就行了。