nginx服务介绍
Nginx是一个高性能的Web服务器和反向代理服务器,它最初是为了处理大量并发连接而设计的。Nginx还可以用作负载均衡器、邮件代理服务器和HTTP缓存。它以其轻量级、稳定性和高吞吐量而闻名,广泛用于大型网站和应用中
-
Nginx的核心功能:
- 静态文件服务:Nginx能够高效地提供静态内容,比如HTML文件、图像和CSS/JS文件。
- 反向代理:Nginx可以作为反向代理服务器,将客户端请求转发到后端服务器,并将后端服务器的响应返回给客户端。它还支持负载均衡。
- 负载均衡:Nginx支持多种负载均衡算法,如轮询(Round-robin)、最小连接(Least Connections)和IP哈希(IP Hash)。
- HTTP缓存:Nginx可以缓存后端服务器的响应,减少服务器的压力并加快响应速度。
- SSL/TLS终结:Nginx能够处理HTTPS请求,通过SSL/TLS加密保护数据传输。
-
Nginx的架构特点:
- 事件驱动架构:与传统的进程/线程模型不同,Nginx使用异步、事件驱动架构,能够处理成千上万的并发连接而占用的资源很少。
- 模块化设计:Nginx支持多种模块,例如HTTP模块、Mail模块等。你可以通过配置启用或禁用不同的功能。
- 高并发:Nginx可以轻松处理数十万并发连接,适合大规模、高流量的场景。
Nginx的基本配置:
Nginx的配置文件通常位于 /etc/nginx/nginx.conf,这是主配置文件。配置文件通过块和指令来定义行为。常见的配置块包括:
http{}:配置HTTP服务的全局设置,如日志格式、默认字符集等。
server{}:每个server块定义一个虚拟主机(virtual host),包括域名、监听端口、站点根目录等。
location{}:location块用于匹配和处理特定的URL请求路径,可以指定不同的处理方式,比如静态文件的存放位置、反向代理设置等。
配置目录说明
- /etc/nginx/nginx.conf:主配置文件,Nginx全局设置。
- /etc/nginx/sites-available/:存放站点(虚拟主机)的配置文件。
- /etc/nginx/sites-enabled/:存放启用的站点配置文件的符号链接。
- /etc/nginx/conf.d/:存放全局的自定义配置文件。
- /etc/nginx/snippets/:存放可复用的配置片段。
- /var/log/nginx/:存放Nginx的日志文件。
- /etc/nginx/mime.types:定义MIME类型映射的文件。
- /etc/nginx/modules-enabled/:存放启用的Nginx动态模块配置文件。
安装使用
nginx命令手册
启动Nginx服务:
sudo systemctl start nginx
停止Nginx服务:
sudo systemctl stop nginx
完全重启Nginx服务,这会关闭并重新启动所有Nginx进程:
sudo systemctl restart nginx
修改了Nginx的配置文件后,可以通过重新加载来应用新的配置,而无需中断服务:
sudo systemctl reload nginx
在重新加载或重启Nginx之前,可以通过以下命令检查配置文件是否有语法错误:
sudo nginx -t
查看Nginx服务的运行状态:
sudo systemctl status nginx
确保Nginx在系统启动时自动运行:
sudo systemctl enable nginx
禁用Nginx的开机自启动:
sudo systemctl disable nginx
如果日志文件被移动或清除,重新打开日志文件:
sudo nginx -s reopen
优雅停止Nginx,允许当前处理的请求完成后再停止服务:
sudo nginx -s quit
强制立即停止Nginx,不等待请求完成:
sudo nginx -s stop
查看当前安装的Nginx版本:
nginx -v
配置静态web服务器
Ubuntu2404环境下安装使用
apt install -y nginx
开机自启动
systemctl enable --now nginx
创建静态文件目录
mkdir -p /var/www/html
创建一个简单的HTML文件
vi /var/www/html/index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Nginx</title>
</head>
<body>
<h1>Hello, this is a static file served by Nginx!</h1>
</body>
</html>
编辑Nginx配置文件;Nginx监听80端口,根路径指向 /var/www/html 目录中的文件。当访问localhost时,Nginx会返回/var/www/html目录下的 index.html 文件
vi /etc/nginx/sites-available/default
server {
listen 80;
server_name localhost;
location / {
root /var/www/html;
index index.html;
}
# 配置一个日志目录(可选)
access_log /var/log/nginx/static_access.log;
error_log /var/log/nginx/static_error.log;
}
配置参数详解
-
server 块
server 块用于定义一个虚拟主机的配置。一个Nginx实例可以包含多个 server 块,每个块处理不同的域名或不同的请求。 -
listen 指令
定义Nginx监听的IP地址和端口号。
listen 80 default_server;: 监听IPv4的80端口,并将此服务器块设为默认服务器。当没有其他服务器块匹配请求时,默认服务器将处理请求。 -
root 指令
指定网站的根目录,即Nginx提供静态文件的基础路径。所有相对路径的文件请求将基于这个目录进行查找 -
index 指令
定义默认的首页文件。当用户访问网站根目录或目录时,Nginx会按顺序查找这些文件并返回第一个存在的文件 -
server_name 指令
指定此服务器块响应的域名或主机名。
_: 通配符,表示所有未被其他 server 块匹配的请求都会由此处理。常用于默认服务器。 -
location 块
定义如何处理特定的URI请求。可以基于路径、正则表达式等进行匹配和处理
location / { … }: 匹配所有以 / 开头的请求,即所有请求。
try_files $uri $uri/ =404;: 尝试按顺序查找请求的文件:
$uri: 请求的URI对应的文件。
$uri/: 请求的URI对应的目录。
=404: 如果前两者都不存在,返回404错误。
检查Nginx配置是否正确
root@huhy:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重新加载Nginx
sudo systemctl reload nginx
界面访问

配置nginx正向代理
正向代理(Forward Proxy)是一种网络代理模式,代理服务器位于客户端和目标服务器之间,代表客户端向目标服务器发送请求,并将目标服务器的响应返回给客户端。客户端通过正向代理间接访问目标服务器。
正向代理的工作原理
-
客户端的请求
客户端(如浏览器或其他程序)将目标地址(如 www.example.com)的请求发送给代理服务器,而不是直接发送到目标服务器。 -
代理服务器的处理
代理服务器接收到请求后,将目标地址作为它自己的请求目标。
将代理请求发送到目标服务器。 -
目标服务器的响应
目标服务器处理代理服务器发来的请求。
返回响应内容到代理服务器。 -
代理服务器的返回
代理服务器将目标服务器的响应转发回客户端。
正向代理的典型用途
- 突破网络限制
正向代理可以绕过防火墙或访问限制,让客户端访问原本无法直接访问的资源。例如,通过正向代理访问被地理位置限制的网站。 - 隐藏客户端身份
使用正向代理,目标服务器只能看到代理服务器的 IP 地址,而看不到客户端的真实 IP 地址,从而保护客户端的隐私。 - 缓存加速
代理服务器可以缓存目标服务器的内容。对于重复请求,直接从缓存中返回结果,从而提高访问速度并减少目标服务器的负载。 - 访问控制与过滤
管理员可以通过正向代理实现对客户端访问的控制。例如,限制某些客户端访问特定类型的网站或资源。 - 记录和分析请求
代理服务器可以记录客户端的访问请求,用于日志分析、安全审计等目的。
实验环境如下
| 主机 | IP |
|---|---|
| nginx服务器(Ubuntu2404) | 192.168.200.160 |
| 客户端(centos7) | 192.168.200.100 |
安装nginx
apt install -y nginx
编辑配置文件
vi /etc/nginx/sites-available/default
server {
listen 8080; # 监听端口,可以根据需要更改
resolver 8.8.8.8 8.8.4.4 valid=300s; # 配置 DNS 解析器
resolver_timeout 5s;
location / {
proxy_pass http://$http_host$request_uri; # 转发请求
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffers 8 16k;
proxy_buffer_size 32k;
proxy_connect_timeout 30s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
# 配置 HTTPS 支持
location /https/ {
proxy_pass https://$http_host$request_uri;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 30s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
- 检查配置文件
root@huhy:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
- 重启nginx
systemctl restart nginx
客户端配置
- 测试nginx是否可达
yum install -y telnet
[root@localhost ~]# telnet 192.168.200.160 8080
Trying 192.168.200.160...
Connected to 192.168.200.160.
Escape character is '^]'.
- 通过环境变量设置编辑全局代理
vi /etc/profile
# 设置 HTTP 代理
export http_proxy="http://192.168.200.160:8080"
# 设置 HTTPS 代理
export https_proxy="http://192.168.200.160:8080"
- 加载环境变量
source /etc/profile
测试验证:在客户端访问网址
[root@localhost ~]# curl -x http://192.168.200.160:8080 -I http://baidu.com
HTTP/1.1 200 OK
Server: nginx/1.24.0 (Ubuntu)
Date: Fri, 17 Jan 2025 03:05:16 GMT
Content-Type: text/html
Content-Length: 81
Connection: keep-alive
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Cache-Control: max-age=86400
Expires: Sat, 18 Jan 2025 03:05:16 GMT
- 查看nginx服务器日志:此时由nginx将100地址的请求进行转发给百度
root@huhy:~# tail -f /var/log/nginx/access.log
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.1 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.100 - - [17/Jan/2025:02:55:03 +0000] "\xFF\xF4\xFF\xFD\x06" 400 166 "-" "-"
192.168.200.100 - - [17/Jan/2025:02:55:33 +0000] "HEAD http://baidu.com/ HTTP/1.1" 200 0 "-" "curl/7.29.0"
192.168.200.100 - - [17/Jan/2025:02:58:57 +0000] "\xFF\xF4\xFF\xFD\x06" 400 166 "-" "-"
192.168.200.100 - - [17/Jan/2025:03:05:16 +0000] "HEAD http://baidu.com/ HTTP/1.1" 200 0 "-" "curl/7.29.0"
进阶配置:
(1)基于 IP 的访问控制
Nginx 可以限制哪些客户端 IP 可以使用代理
vi /etc/nginx/sites-available/default
---------------------
location / {
allow 192.168.1.0/24; # 允许某个网段
deny all; # 拒绝其他所有访问
proxy_pass http://$http_host$request_uri;
--------------
}
(2)基于用户认证的访问控制
为代理添加基本的 HTTP 用户认证:
- 生成用户认证文件:
apt install -y apache2-utils
- 创建一个密码文件:会提示输入并确认密码。
root@huhy:~# htpasswd -c /etc/nginx/.htpasswd username
New password:
Re-type new password:
Adding password for user username
root@huhy:~#
- 修改 Nginx 配置
vi /etc/nginx/sites-available/default
location / {
auth_basic "Restricted Access"; #添加
auth_basic_user_file /etc/nginx/.htpasswd; #添加
proxy_pass http://$http_host$request_uri;
...
}
systemctl restart nginx
客户端测试访问:出现401
[root@localhost ~]# curl -x http://192.168.200.160:8080 -I http://baidu.com
HTTP/1.1 401 Unauthorized
Server: nginx/1.24.0 (Ubuntu)
Date: Fri, 17 Jan 2025 05:55:19 GMT
Content-Type: text/html
Content-Length: 188
Connection: keep-alive
WWW-Authenticate: Basic realm="Restricted Access"
- 给出用户名和密码后即可登录
[root@localhost ~]# curl -x http://192.168.200.160:8080 -I http://baidu.com -uusername:000000
HTTP/1.1 200 OK
Server: nginx/1.24.0 (Ubuntu)
Date: Fri, 17 Jan 2025 05:56:45 GMT
Content-Type: text/html
Content-Length: 81
Connection: keep-alive
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Cache-Control: max-age=86400
Expires: Sat, 18 Jan 2025 05:56:45 GMT
root@huhy:~# tail -f /var/log/nginx/access.log
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.160 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.1 - - [17/Jan/2025:02:32:06 +0000] "GET /favicon.ico HTTP/1.1" 400 242 "http://192.168.200.160:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.200.100 - - [17/Jan/2025:02:55:03 +0000] "\xFF\xF4\xFF\xFD\x06" 400 166 "-" "-"
192.168.200.100 - - [17/Jan/2025:02:55:33 +0000] "HEAD http://baidu.com/ HTTP/1.1" 200 0 "-" "curl/7.29.0"
192.168.200.100 - - [17/Jan/2025:02:58:57 +0000] "\xFF\xF4\xFF\xFD\x06" 400 166 "-" "-"
192.168.200.100 - - [17/Jan/2025:03:05:16 +0000] "HEAD http://baidu.com/ HTTP/1.1" 200 0 "-" "curl/7.29.0"
192.168.200.100 - - [17/Jan/2025:05:55:19 +0000] "HEAD http://baidu.com/ HTTP/1.1" 401 0 "-" "curl/7.29.0"
192.168.200.100 - username [17/Jan/2025:05:56:45 +0000] "HEAD http://baidu.com/ HTTP/1.1" 200 0 "-" "curl/7.29.0"

浙公网安备 33010602011771号