一.概念
- Nginx 是一个高性能、开源的 Web 服务器 、反向代理服务器 和 负载均衡器。
- 以其 高并发处理能力、低内存消耗 和 稳定性 而闻名。
- 常用于托管静态内容、反向代理动态应用(如 PHP, Python, Java 应用)、负载均衡、缓存加速以及作为 HTTP 或 TCP/UDP 流量的代理。
二.核心功能
- HTTP(S) 服务器: 直接提供静态文件(HTML, CSS, JS, 图片等)。
- 正向代理

正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
- 反向代理:
- 接收客户端请求。
- 根据配置规则,将请求转发给后端的一个或多个服务器(如应用服务器 Tomcat, uWSGI, Gunicorn 等)。
- 接收后端服务器的响应。
- 将响应返回给客户端。
- 对客户端隐藏了后端服务器的真实信息。

它是在客户端和服务器端的一个代理服务器,但是这个代理服务器的目的是用来保护服务器端的,当外网客户端来访问我们的服务器时为了避免暴露应用服务器的实际ip地址,我们会让客端访问代理服务器,然后代理服务器再根据客户端的请求去实际的应用服务器获取响应内容并返回客户端
- 负载均衡:
- 将客户端请求分发到多个后端服务器,实现流量分摊、提高系统吞吐量和容错能力。
- 常用算法:轮询、权重轮询、IP哈希、最少连接等。
- 缓存:
- 可以缓存后端服务器的响应内容,加速对相同请求的响应速度,减轻后端压力。
- SSL/TLS 终止: 处理客户端的 HTTPS 请求,完成 SSL/TLS 握手和解密,再将明文请求转发给后端服务器(后端可用 HTTP)。
- 动静分离: 直接处理静态文件请求,动态请求则转发给应用服务器处理。
三.nginx命令
常用命令
bash
systemctl start nginx # 启动服务
systemcctl restart nginx # 重启服务
systemctl enable nginx # 开机启动
systemctl stop nginx # 停止服务
systemctl disable nginx # 取消开机启动
systemctl status nginx # 查看状态
nginx自带命令
bash
nginx # 启动nginx
nginx restart # 重启服务
nginx -s reload # 重新加载配置文件
nginx -s stop # 强行停止服务
nginx -s quit # 优雅停止服务,即所有请求处理完后退出服务
nginx -v # 查看版本号
nginx -t # 检查配置文件的语法错误,无错返回ok
四.nginx配置
安装nginx
bash
yum install nginx -y #安装nginx
nginx -V # 查看版本,编译器、配置参数等信息
systemctl start nginx # 启动httpd
systemctl enable nginx # 设置开机启动
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
systemctl status nginx # 查看状态,q键退出查看
ps -ef | grep nginx # 查看进程


主要配置文件

网页默认目录:/usr/share/nginx/html
访问日志:/var/log/nginx/access.log
错误日志:/var/log/nginx/error.log
主配置文件分析:
bash
[root@server ~]# vim /etc/nginx/nginx.conf
bash
# main配置段(全局配置)
user nginx; # 运行的账户,默认即是nginx,可以不进行设置
worker_processes auto; # worker进程数,根据硬件调整,通常等于CPU数量或者2倍于CPU
error_log /var/log/nginx/error.log; # 错误日志存放目录
pid /run/nginx.pid; # 指定运行Nginx master主进程的pid文件存放路径
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf; # 导入的外部文件位置
# events配置段,性能模块设置,其中可以设置时间处理模式等
events {
use epoll; # 使用epoll事件驱动模型,但不推荐配置它,让nginx自己选择
worker_connections 1024; # 每个进程的最大连接数量(并发数)
accept_mutex on # 默认是off关闭的,这里推荐打开
}
# http配置段,包含全局块和server块,使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 以上定义日志格式
access_log /var/log/nginx/access.log main; # 访问日志存储位置
sendfile on; # 高效文件传输模式,默认开启
tcp_nopush on; # 性能优化参数,数据是否立刻发送
tcp_nodelay on; # 性能优化参数,小数据包是否延迟发送
keepalive_timeout 65; # 超时时间
types_hash_max_size 4096; # 性能优化参数,影响散列表的冲率
include /etc/nginx/mime.types; # 可解析的静态资源类型
default_type application/octet-stream; # 默认文件类型
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf; # 加载子配置项
# server配置段,虚拟主机设置
server {
listen 80; # 监听IPV4端口
listen [::]:80; # 监听IPV6端口
server_name _; # 访问的域名
root /usr/share/nginx/html; # 网页默认目录
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf; # 子配置文件存储路径
# location配置段,一般用来匹配不同的URI请求
location / {
root /usr/share/nginx/html; # 相对路径网站根目录
alias /usr/share/nginx/html/; # 绝对路径网站根目录
index index.html index.htm; # 默认首页文件
deny 172.168.22.11; # 禁止访问的ip地址,可以为all
allow 172.168.33.44; # 允许访问的ip地址,可以为all
autoindex on; # 开启目录文件列表
autoindex_exact_size on; # 显示出文件的确切大小,单位是bytes
autoindex_localtime on; # 显示的文件时间为文件的服务器时间
charset utf-8,gbk; # 避免中文乱码
auth_basic "xxxx"; # 加密网页验证时的提示信息
auth_basic_user_file /路径/文件名; # 加密网页使用的密码验证文件
}
error_page 404 /404.html; # 404时返回给客户端的页面
location = /40x.html {
}
error_page 500 502 503 504 /50x.html; # 50x错误返回给客户端的页面
location = /50x.html {
}
}
# Settings for a TLS enabled server. # https虚拟主机定义
#
# server {
# listen 443 ssl http2; # 监听的IPV4端口
# listen [::]:443 ssl http2;
# server_name _;
# root /usr/share/nginx/html; # 网页默认目录
#
# ssl_certificate "/etc/pki/nginx/server.crt"; # 证书存储路径
# ssl_certificate_key "/etc/pki/nginx/private/server.key"; # 密钥存储
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}
虚拟主机功能
在/www/下创建对应heml文件:


1.基于 IP 地址的虚拟主机
如果一台服务器有多个IP地址,而且每个IP地址与服务器上部署的每个网站一一对应,当用户请求的IP地址不同,则会访问到不同网页,且每个网站都有一个独立的IP地址。
在/etc/nginx/conf.d目录下建立子配置文件实现:



2.基于端口号的虚拟主机


用浏览器访问:


3.基于域名的虚拟主机



进行访问测试:
