nginx配置文件中server_name
时间: 2023-11-25 07:58:21 浏览: 153
server_name是nginx中的一个指令,用于指定虚拟主机的域名或IP地址。它可以出现在http、server、location等块中,用于匹配请求的域名或IP地址。当请求的域名或IP地址匹配server_name指定的值时,nginx会将请求转发到对应的虚拟主机处理。例如:
```
http {
server {
listen 80;
server_name example.com www.example.com;
...
}
}
```
以上配置表示当请求的域名是example.com或www.example.com时,nginx会将请求转发到该虚拟主机处理。
此外,server_name还支持通配符和正则表达式,如:
```
server_name *.example.com;
server_name ~^(?<subdomain>.+)\.example\.com$;
```
以上配置表示当请求的域名以.example.com结尾时,或者以任意子域名加.example.com结尾时,nginx会将请求转发到对应的虚拟主机处理。
相关问题
nginx配置文件中 server_name _的含义
在 Nginx 的配置文件中,`server_name` 是用于指定该块配置所对应的域名或IP地址列表。当 Nginx 接收请求时,它会检查请求头中的 Host 字段,然后查找匹配的 `server_name` 条目。如果找到匹配,那么这一块的配置就会应用到相应的请求上。
`_` 在这里是一个特殊的通配符,表示 "all" 或 "default",它表示当前配置将应用于所有未明确匹配其他 `server_name` 的请求。当你只有一个 `server_name` 被声明,并且以 `_` 结束时,这通常代表这是一个默认的主机名,即如果没有提供明确的域名或者请求没有匹配其他更具体的 `server_name`,Nginx 就会使用这里的配置。
例如:
```nginx
server {
server_name _; # 匹配所有请求,作为默认服务器
access_log logs/all_access.log combined;
error_page 404 /404.html;
}
```
如果请求没有匹配其他更精确的 `server_name`,Nginx 就会使用这里的配置处理请求。
nginx启用ssl_preread_server_name并透传真实客户端IP
启用`ssl_preread_server_name`并透传真实客户端IP需要进行如下配置:
1. 在Nginx配置文件中加入`ssl_preread`相关配置:
```nginx
stream {
map $ssl_preread_server_name $upstream {
mydomain.com backend_mydomain;
myotherdomain.com backend_myotherdomain;
default backend_default;
}
upstream backend_mydomain {
server 192.168.1.1:443;
}
upstream backend_myotherdomain {
server 192.168.1.2:443;
}
upstream backend_default {
server 192.168.1.3:443;
}
server {
listen 443;
proxy_pass $upstream;
ssl_preread on;
ssl_preread_server_name on;
proxy_protocol on;
}
}
```
2. 在后端服务器中安装支持`proxy_protocol`的软件,如HAProxy等。
3. 配置后端服务器接收`proxy_protocol`协议,并解析出客户端的真实IP地址。
这样配置之后,Nginx会使用`ssl_preread`预读取客户端的TLS版本和SNI信息,并将请求转发到相应的后端服务器上。同时,Nginx也会通过`proxy_protocol`透传客户端的真实IP地址给后端服务器。
阅读全文