Nginx

一、nginx的简介

Nginx 是一款高性能的 HTTP 服务器、反向代理服务器和负载均衡器,核心优势是轻量、高并发、低资源消耗,广泛用于网站部署、接口代理等场景。

二、特点

性能:高并发、低资源消耗,异步非阻塞架构支撑数万级连接。

功能:集 HTTP 服务、反向代理、负载均衡于一体,模块化设计可灵活扩展。

稳定:master-worker 进程模型保障服务高可用,经长期生产验证。

配置:语法简洁,支持热加载,复杂功能可通过简单配置实现。

兼容:跨 Linux、Windows、macOS 等多系统部署。

三、nginx架构

注意:默认情况下,nginx会建立和服务器CPU核心数相等的worker进程,woker进程之间相互独立,若一个进程故障不会影响其它进程。

四、nginx关键工作机制

  • 抢占机制:当客户端发起请求时,会激活a***ept_mutex互斥锁,哪个worker抢占了该互斥锁,该客户端的请求就由那个worker响应和处理

  • 异步非阻塞模式:在传统事件处理模式下,如果所有的worker被客户端阻塞后,新来的客户就需要等待,直到原来的客户端释放worker后才能被处理请求,在异步非阻塞模式下,底层使用了linux的epoll模型,就算worker被阻塞,新的客户端请求也会被正常处理

五、nginx正向代理功能

正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。就像要访问google用vpn代理翻墙去访问(用户知道要访问真正的服务器)。

六、nginx反向代理功能

反向代理正好相反,它也是在客户端和服务器端的一个代理服务器,但是这个代理服务器的目的是用来保护服务器端的,当外网客户端来访问我们的服务器时为了避免暴露应用服务器的实际ip地址,我们会让客端访问代理服务器,然后代理服务器再根据客户端的请求去实际的应用服务器获取响应内容并返回客户端。

七、nginx负载均衡功能

八、部署Nginx

[root@server ~]# setenforce  0           

[root@server ~]# systemctl stop  firewalld

[root@server ~]# systemctl disable  firewalld

[root@server ~]# yum  install  nginx  -y


[root@server ~]# nginx  -V  # 查看版本,编译器、配置参数等信息

[root@server ~]# systemctl start  nginx   # 启动httpd

[root@server ~]# systemctl enable  nginx  # 设置开机启动
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.

[root@server ~]# systemctl status  nginx    # 查看状态,q键退出查看

[root@server ~]# ps  -ef  |  grep  nginx  # 查看进程
root        1690       1  0 13:57 ?        00:00:00 nginx: master process /usr/sbin/nginx
nginx       1691    1690  0 13:57 ?        00:00:00 nginx: worker process
nginx       1692    1690  0 13:57 ?        00:00:00 nginx: worker process
root        1726    1510  0 14:00 pts/0    00:00:00 grep --color=auto nginx

# 测试,Windows中打开浏览器输入服务器IP地址

九、常用命令

(1)systemctl系列

systemctl  start  nginx   # 启动服务

system***tl restart  nginx  # 重启服务

systemctl  enable  nginx   # 开机启动

systemctl  stop  nginx     # 停止服务

systemctl  disable  nginx  # 取消开机启动

systemctl  status   nginx  # 查看状态

(2)nginx自带命令

nginx    # 启动nginx

nginx   restart  # 重启服务

nginx  -s  reload  # 重新加载配置文件

nginx  -s  stop    # 强行停止服务

nginx  -s  quit    # 优雅停止服务,即所有请求处理完后退出服务

nginx  -v         # 查看版本号

nginx -t         # 检查配置文件的语法错误,无错返回ok

十、nginx配置文件

/etc/nginx/nginx.conf                主配置文件
/etc/nginx/conf.d/                    子配置目录
/etc/nginx/fastcgi.conf                
/etc/nginx/fastcgi_params
/etc/nginx/*.default                默认配置
/usr/share/nginx/html                网页默认目录
/var/log/nginx/a***ess.log            访问日志
/var/log/nginx/error.log            错误日志

网页默认目录:/usr/share/nginx/html
访问日志:/var/log/nginx/a***ess.log
错误日志:/var/log/nginx/error.log

十一、主配置文件

[root@server ~]# vim  /etc/nginx/nginx.conf
# 1. 全局块:整体运行参数
worker_processes auto;  # 核心:工作进程数=CPU核心数
error_log /var/log/nginx/error.log warn;  # 错误日志
pid /var/run/nginx.pid;  # 进程PID文件

# 2. 事件块:并发连接配置
events {
    worker_connections 10240;  # 核心:单Worker最大并发连接(高并发必调)
    use epoll;  # 事件驱动模型(自动适配,可省略)
}

# 3. HTTP块:HTTP/HTTPS核心配置(最关键层级)
http {
    include mime.types;  # 必配:识别文件MIME类型
    default_type application/octet-stream;  # 默认文件类型

    # 日志配置
    log_format main '$remote_addr [$time_local] "$request" $status $body_bytes_sent';
    a***ess_log /var/log/nginx/a***ess.log main;  # 访问日志

    # 性能优化核心指令
    sendfile on;  # 静态资源零拷贝(必开)
    keepalive_timeout 65;  # 长连接超时
    gzip on;  # Gzip压缩(必开)

    # 4. 负载均衡集群(可选,需反向代理时配置)
    upstream backend {
        server 192.168.1.10:8080 weight=5;  # 后端节点+权重
        server 192.168.1.11:8080 backup;    # 备用节点
        ip_hash;  # 会话保持(可选)
    }

    # 5. 虚拟主机(Server块,可多个)
    server {
        listen 80;  # 监听端口
        server_name example.***;  # 绑定域名

        # 路径规则(Location块)
        location / {
            root /usr/share/nginx/html;  # 静态资源根目录
            index index.html;  # 默认首页
        }

        # 反向代理示例(可选)
        location /api {
            proxy_pass http://backend;  # 转发到负载均衡集群
            proxy_set_header Host $host;  # 透传Host
            proxy_set_header X-Real-IP $remote_addr;  # 透传真实IP
        }
    }

    # HTTPS虚拟主机(可选)
    server {
        listen 443 ssl;
        server_name example.***;
        ssl_certificate /etc/nginx/certs/fullchain.pem;  # 公钥
        ssl_certificate_key /etc/nginx/certs/privkey.pem;  # 私钥
        ssl_protocols TLSv1.2 TLSv1.3;  # 安全TLS版本

        location / {
            proxy_pass http://backend;
        }
    }
}

十二、重要实验

第一步:安装nginx

# 恢复快照

[root@server ~]# setenforce  0           

[root@server ~]# systemctl stop  firewalld

[root@server ~]# systemctl disable  firewalld

[root@server ~]# yum  install  nginx    -y  

[root@server ~]# systemctl start  nginx   # 启动httpd
 
[root@server ~]# systemctl enable  nginx  # 设置开机启动

第二步:配置文件

[root@server ~]# vim  /etc/nginx/nginx.conf
server {
        listen       80;
        listen       [::]:80;
        root         /vat/log;    # 选择一个开放的目录用于查看并下载
        autoindex    on;    # 开启目录访问列表

第三步:重启服务测试

[root@server ~]# systemctl restart nginx 

十三、使用nginx的http_ssl模块建立加密认证网站

重要实验

  • 组建多个子目录网站www.openlab.***,该网站有2个子目录www.openlab.***/file和www.openlab.***/ftp,要求:

    • file数据使用http读取

    • ftp数据使用https读取

  • 第一步:准备工作

  • # 恢复快照
    [root@server ~]# setenforce  0           
    
    [root@server ~]# systemctl stop  firewalld
    
    [root@server ~]# systemctl disable  firewalld
    
    [root@server ~]# yum  install  nginx -y
    
    [root@server ~]# systemctl start  nginx   # 启动nginx
     
    [root@server ~]# systemctl enable  nginx  # 设置开机启动

    第二步:新建网页目录并建立网页

[root@server ~]# mkdir  -p  /www/file
[root@server ~]# mkdir  -p  /www/ftp
[root@server ~]# echo  "file"  >  /www/file/index.html  # 写入网站数据
[root@server ~]# echo  "ftp"  >  /www/ftp/index.html
[root@localhost ~]# tree /www/
/www/
├── file
│   └── index.html
├── ftp
│   └── index.html
└── zy
    └── index.html
[root@server ~]# vim  /etc/hosts   # 添加如下内容
192.168.    www.openlab.***        #补充自己的ip

记得在本地的C:\Windows\System32\drivers\etc\hosts中则增加文件配置

192.168.     www.openlab.***

第四步:建立file网站

自己补充完自己的省份,城市,邮箱等,这几个可以随意写,但是***mon Name (eg, your name or your server's hostname) []:www.openlab.***  这个要写网站名

[root@server ~]# vim  /etc/nginx/nginx.conf 
server {
                listen       80;  #监听端口
                server_name  www.openlab.***;
                location   /file {
                                        alias /www/file/;
                                        index index.html index.htm;
                                }
           }

第五步:建立https的ftp网站

[root@localhost ~]# mkdir /etc/nginx/certs
[root@localhost ~]# cd /etc/nginx/certs/

[root@localhost certs]# openssl req -x509 -newkey rsa:2048 -keyout  ftp.key -nodes -days 365 -out ftp.crt

Country Name (2 letter code) [XX]:86      
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:    
Organization Name (eg, ***pany) [Default ***pany Ltd]:cloud
Organizational Unit Name (eg, section) []:rhce
***mon Name (eg, your name or your server's hostname) []:www.openlab.***
Email Address []:



[root@server ~]# vim  /etc/nginx/nginx.conf      # 编辑配置文件
server {
                listen       443 ssl http2;
                server_name  www.openlab.***;
                location /ftp {
                                        alias         /www/ftp;
                                        index  index.html  index.htm;
                                }
                ssl_certificate       "/etc/nginx/certs/ftp.crt";
                ssl_certificate_key   "/etc/nginx/certs/ftp.key";
        }

第六步:重启服务

[root@server ~]# systemctl  restart  nginx

第七步:测试

# 输入http://www.openlab.***/file
# 输入https://www.openlab.***/ftp,点击高级->接受风险并继续

结果就如上图

nginx -V 2>&1 | grep ssl

部分 作用
nginx -V 查看 Nginx 的编译参数(大写 V,小写 v 仅显示版本号)
2>&1 将标准错误输出(stderr,文件描述符 2)重定向到标准输出(stdout,文件描述符 1)
grep ssl 过滤输出中包含 ssl 关键字的内容(筛选 SSL 相关编译参数)

十四、使用LNMP搭建私有云存储

需要注意的点:把 /etc/nginx/nginx.conf 这几行都注释掉,是为了查看浏览器报错信息,不然根本不会显示

# error_page 404 /404.html;
        #location = /404.html {
        #}

        #error_page 500 502 503 504 /50x.html;
        #location = /50x.html {
        #}

如果使用rhce 9版本可以使用nextcloud 29版本

转载请说明出处内容投诉
CSS教程网 » Nginx

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买