Nginx常用基础配置详解
介绍
Nginx 是一个高性能的开源 Web 服务器,它不仅可以作为 HTTP 服务器使用,还可以用作反向代理服务器、负载均衡器、缓存服务器等。在实际应用中,正确配置 Nginx 是确保网站稳定性和性能的重要步骤。本文将详细介绍一些常用的 Nginx 基础配置,包括虚拟主机配置、HTTP 重定向、反向代理等内容,并提供详细的示例说明。
虚拟主机配置
虚拟主机是 Nginx 中非常重要的概念,它允许您在一台服务器上托管多个网站。下面是一个简单的虚拟主机配置示例:
1 | server { |
- **
listen 80;
**:指定Nginx
监听的端口号。 - **
server_name example.com www.example.com;
**:指定虚拟主机的域名。 - **
root /var/www/example;
**:指定网站的根目录。 - **
index index.html index.htm;
**:指定默认的索引文件。 - **
location /
**:配置请求的URL
路径。 - **
try_files $uri $uri/ /index.html;
**:尝试寻找与请求URI
匹配的文件,如果找不到则返回index.html
。
HTTP 重定向
HTTP 重定向是将一个 URL 请求重定向到另一个 URL 的过程。下面是一个简单的 HTTP 重定向配置示例:
1 | server { |
这个配置会将所有访问 www.example.com
的请求重定向到 example.com
,保证网站的访问统一性。
反向代理
Nginx
反向代理是将客户端的请求转发给后端服务器的过程,常用于负载均衡和隐藏后端服务器。下面是一个简单的反向代理配置示例:
1 | server { |
- **
proxy_pass http://backend_server;
**:指定后端服务器的地址。 - **
proxy_set_header
**:设置代理请求的头部信息,如Host
、X-Real-IP
、X-Forwarded-For
等。
SSL/TLS 配置
SSL/TLS
是保护网站安全的重要手段,Nginx
提供了丰富的 SSL/TLS
配置选项。下面是一个简单的 SSL/TLS
配置示例:
1 | server { |
- **
listen 443 ssl;
**:指定监听的端口号,并开启 SSL。 - **
ssl_certificate 和 ssl_certificate_key
**:指定 SSL 证书和私钥的路径。 - **
ssl_protocols
**:指定允许的 SSL/TLS 协议版本。 - **
ssl_prefer_server_ciphers on;
**:优先使用服务器端的加密算法。 - **
ssl_ciphers
**:指定允许的加密算法。
隐藏 Nginx 版本信息
要隐藏 Nginx
版本信息,您可以通过在配置文件中进行相应的设置来实现。具体来说,您需要修改 nginx.conf
文件,使用 server_tokens off;
指令来关闭 Nginx
的版本号显示。以下是如何进行配置的示例:
1 | http { |
将上述配置添加到 nginx.conf
文件的 http
块中即可禁用 Nginx
版本号显示。
禁止 ip 直接访问 80 端口
要禁止直接通过 IP
地址访问 80
端口,您可以通过 Nginx
配置文件进行相应的设置。具体来说,您可以配置一个默认的 server
块,用于捕获所有请求,并返回一个错误页面或者重定向到其他地址。以下是一个示例配置:
1 | server { |
在这个配置中:
- **
listen 80 default_server;
**:指定Nginx
监听默认的HTTP
端口,并将此server
块标记为默认服务器。 - **
server_name _;
**: 表示该server
块将匹配所有请求。 - **
return 444;
**: 是一个特殊的Nginx
返回指令,它会立即关闭客户端连接,相当于不做任何响应。
通过这样的配置,当有请求通过 IP
地址直接访问 80
端口时,Nginx
将返回一个 444
错误,不会提供任何内容,从而实现了禁止直接访问 80
端口的目的。
启动 web 服务 (react 项目为例)
1 | server { |
在这个配置中:
- **
listen 80;
**: 指定 Nginx 监听的端口号。 - **
server_name _;
**: 表示该server
块将匹配所有请求。 - **
location /
**: 配置请求的 · 路径,尝试寻找与请求URI
匹配的文件,如果找不到则返回index.html
。 - **
add_header X-Frame-Options SAMEORIGIN;
**:设置响应的头部信息X-Frame-Options
,不允许我们的页面嵌套到第三方网页里面。 - **
root /var/nginx/html;
**: 指定网站的根目录,这里是React
项目构建后的静态文件目录。 - **
index index.html;
**: 指定默认的索引文件。 - **
try_files $uri $uri/ /index.html;
**:尝试寻找与请求URI
匹配的文件,如果找不到则返回index.html
。
一个web服务,配置多个项目 (location 匹配路由区别)
1 | server { |
在上述配置中
- **
location ^~ /user/
**:使用^~
修饰的location
块,匹配以/user/
开头的URI
。如果请求的URI
以/user/
开头,则Nginx
将立即停止搜索其他location
块,而是使用这个location
块进行处理,location
块里面使用反向代理,指向服务器http://localhost:8001
的地址。 - **
location ^~ /product/
**:同上,匹配以/product/
开头的URI
。
PC端和移动端使用不同的项目文件映射
要在 Nginx
中根据用户设备类型(例如PC端和移动端)使用不同的项目文件映射,您可以使用 map
指令创建一个变量,根据用户的 User-Agent
头部信息来判断设备类型,并使用if语句根据变量的值来选择不同的文件映射。以下是一个示例配置:
1 | map $http_user_agent $is_mobile { |
或者
1 | server { |
在这个配置中:
- **
map $http_user_agent $is_mobile
**:创建一个变量$is_mobile
,根据$http_user_agent
中的User-Agent
头部信息判断设备类型。如果User-Agent
中包含iphone
、android
、mobile
等关键词,则将$is_mobile
设置为1
,否则设置为0
。 - **
location /
**:对所有请求进行匹配。 - **
if ($is_mobile)
**:使用if
语句根据$is_mobile
的值判断设备类型。如果是移动设备,则将请求映射到/var/www/mobile/
目录;否则映射到/var/www/desktop/
目录。 - **
try_files $uri $uri/ /index.html;
**:尝试寻找与请求URI
匹配的文件,如果找不到则返回/index.html
。
需要注意的是,尽管 if
语句在 Nginx
中是有效的,但它可能会导致性能问题,并且在某些情况下可能不起作用。如果您担心性能问题,可以考虑使用更高效的方法,如根据不同的 User-Agent
头部信息设置不同的变量,并使用 map
指令匹配。
配置负载均衡
要在 Nginx
中配置负载均衡,您可以使用 upstream
块定义一组后端服务器,并在 server
块中使用 proxy_pass
指令将请求代理到这组后端服务器。以下是一个示例配置:
1 | http { |
在这个配置中:
- **
upstream backend
**:定义了一个名为backend
的负载均衡组,其中包含了三个后端服务器:backend1.example.com
、backend2.example.com
和backend3.example.com
。 - **
server块中的location /
**:匹配所有请求。 - **
proxy_pass http://backend;
**:将请求代理到名为backend
的负载均衡组中的服务器。Nginx
会自动根据默认的负载均衡算法(轮询)将请求分发到这组后端服务器中的一个。 - **
proxy_set_header
**:设置代理请求的头部信息,如真实IP
地址、转发者IP
地址和主机地址。
您还可以根据需要添加其他负载均衡配置选项,例如设置负载均衡算法、调整权重等。以下是一个更复杂的负载均衡配置示例:
1 | http { |
在这个配置中:
- **
least_conn
**:使用最少连接数算法进行负载均衡。 - **
server backend1.example.com weight=3;
**:设置backend1.example.com
的权重为3
,比其他后端服务器更具优先级。 - **
proxy_set_header
**:设置代理请求的头部信息,如真实IP
地址、转发者IP
地址和主机地址。
总结
本文介绍了一些常用的 Nginx
基础配置,包括虚拟主机配置、HTTP
重定向、反向代理、SSL/TLS
配置等内容,并提供了详细的示例说明。正确配置 Nginx
不仅可以提高网站的性能和安全性,还能提升用户体验和搜索引擎排名。希望本文能够帮助您更好地理解和应用 Nginx
,在实际项目中发挥其作用。
注意:
配置完成后,保存并关闭文件,然后重新加载Nginx以使配置生效:
1 | sudo systemctl reload nginx |