原先server_name 配的是api.test.toutiao.applet.rockysaas.com,监听的是80端口,http。后来域名改成了api-test.tbk.rockysaas.com,监听443,https。但是发现原先的api.test.toutiao.applet.rockysaas.com还能访问。
server { # listen 80; listen 443 ssl; ssl_certificate /usr/local/webserver/nginx/conf/ca/3519907_api-test.tbk.rockysaas.com.pem; ssl_certificate_key /usr/local/webserver/nginx/conf/ca/3519907_api-test.tbk.rockysaas.com.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; server_name api-test.tbk.rockysaas.com; access_log /var/log/nginx/tbk.api.access.log main; index index.html; location /tbk { #请求头数据大小设置 client_max_body_size 32m; client_body_buffer_size 8192k; proxy_send_timeout 300; proxy_read_timeout 300; #tomcat返回数据大小设置 proxy_buffer_size 128k; proxy_buffers 32 32k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 256k; proxy_connect_timeout 300s; proxy_pass http://localhost:8238/tbk; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
后来在网上看到
如果nginx中只配置一个server域的话,则nginx是不会去进行server_name的匹配的。因为只有一个server域,也就是这有一个虚拟主机,那么肯定是发送到该nginx的所有请求均是要转发到这一个域的,即便做一次匹配也是没有用的。还不如干脆直接就省了。如果一个http域的server域有多个,nginx才会根据$hostname去匹配server_name进而把请求转发到匹配的server域中。此时的匹配会按照匹配的优先级进行,一旦匹配成功进不会再进行匹配,关于具体的匹配规则可以参见nginx官网提供的文档。 评论 (2) 引用此答案 举报 wang_wei 2013/03/13 11:45 实际上,nginx会匹配请求头中的host和server_name,如果没有匹配的上,nginx会指定该请求到一个默认的server域,如果比较说明,默认的server为第一个server。因此,就出现了如楼主所述的情况。
可能是配443端口的server只有两个,然后访问https://api-test.tbk.rockysaas.com时默认就跑到这里来了。访问http://api-test.tbk.rockysaas.com时返回的是
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nginx配置时server_name配的不一样还能正常访问 - Python技术站