Nginx 服务器

Nginx 服务器

Nginx 介绍

  • Nginx 是一款高性能的开源 HTTP 和反向代理服务器,同时也具备 IMAP/POP3/SMTP 代理功能,能够选择高效的epoll、kqueue、eventport最为网络I/O模型

  • Nginx 核心优势:

    • 高并发处理能力:Nginx 采用异步、非阻塞的事件驱动模型,能够高效处理大量并发连接。在同等硬件资源下,相比传统的 Apache 服务器,能支持更多的并发请求,甚至可轻松应对数万级别的并发连接

    • 低资源消耗:在空闲状态下,Nginx 进程占用的内存非常少。即使在高并发场景下,CPU 和内存的使用率也能保持在较低水平

    • 高可靠性:Nginx 采用主从进程架构,主进程负责管理配置加载、子进程监控等,工作进程负责处理实际的网络请求。当某个工作进程出现异常时,主进程会迅速启动新的工作进程来替代它,保证服务的持续稳定运行,极少出现宕机情况

    • 模块化设计:Nginx 的核心功能模块设计简洁,同时支持丰富的第三方模块扩展。用户可以根据实际需求,通过加载不同的模块来实现 URL 重写、缓存、SSL 加密、负载均衡等功能,极大地增强了 Nginx 的灵活性和可扩展性

    • 跨平台支持:Nginx 可以运行在多种操作系统上,包括 Linux、FreeBSD、Solaris、Windows 等,其中在 Linux 系统上的性能表现最佳,是大多数互联网企业的首选部署环境

  • Nginx 主要应用场景:

    • 静态资源服务:高效处理 HTML、CSS、JS、图片、视频等静态文件,支持缓存策略和压缩传输,提升资源加载速度

    • 反向代理:作为前端请求入口,将请求转发至后端业务服务器(如 Java Spring Boot、Python Django、Node.js 服务),隐藏后端服务细节,提高安全性

    • 负载均衡:将高并发请求分发到多台后端服务器,实现流量分担,避免单点故障,提升系统整体可用性和吞吐量

    • HTTPS 终端:处理 SSL/TLS 加密解密,简化后端服务的安全配置,同时支持证书管理和安全协议优化

    • API 网关:实现 API 请求的路由、认证、限流、日志记录等功能,统一管理后端 API 服务

Nginx 配置文件

  • 主配置文件: /etc/nginx/nginx.conf
  • 虚拟主机配置目录: /etc/nginx/conf.d/ ,目录下 .conf 后缀文件会被主配置自动引入
  • 默认静态页面目录: /usr/share/nginx/html
  • 日志目录: /var/log/nginx/

安装 Nginx

安装nginx软件包

[root@server ~ 09:26:05]# yum install -y nginx

启动服务

[root@server ~ 09:26:21]# systemctl enable nginx --now

配置静态页面

[root@server ~ 11:13:04]# echo hello world > /etc/nginx/html/index.html

域名解析

# windows客户端修改 C:\Windows\System32\drivers\etc\hosts
# Linux或Unix修改 /etc/hosts

# 添加需要解析的域名
10.1.8.10 www.stj.cloud

[root@client ~ 11:29:42]# cat /etc/hosts
...
10.1.8.10 server.stj.cloud server www.stj.cloud
10.1.8.11 client.stj.cloud client

Nginx 虚拟主机设置

Nginx 虚拟主机允许在一台服务器上托管多个网站

基于域名的虚拟主机

复制配置文件模板到虚拟主机配置文件 vhost-name.conf

[root@server ~ 09:50:30]# cp /etc/nginx/nginx.conf /etc/nginx/conf.d/vhost-name.conf

修改 vhost-name.conf 虚拟主机配置文件

[root@server ~ 09:53:49]# vim /etc/nginx/conf.d/vhost-name.conf
[root@server ~ 16:56:46]# cat /etc/nginx/conf.d/vhost-name.conf
server {
    server_name  www1.stj.cloud;
    root         /usr/share/nginx/www1;
}
server {
    server_name  www2.stj.cloud;
    root         /usr/share/nginx/www2;
}

配置网页,并重启服务

[root@server ~ 09:38:14]# mkdir -p /usr/share/nginx/www{1,2}
[root@server ~ 09:49:11]# cp /usr/share/nginx/html/index.html /usr/share/nginx/www1
[root@server ~ 09:49:21]# cp /usr/share/nginx/html/index.html /usr/share/nginx/www2

[root@server ~ 09:50:10]# echo www1.stj.cloud > /usr/share/nginx/www1/index.html
[root@server ~ 09:50:31]# echo www2.stj.cloud > /usr/share/nginx/www2/index.html
[root@server ~ 10:02:24]# systemctl restart nginx

配置客户端域名解析

[root@client ~ 09:41:44]# vim /etc/hosts
[root@client ~ 11:29:42]# cat /etc/hosts
...
10.1.8.10 server.stj.cloud server www1.stj.cloud www2.stj.cloud www.stj.cloud
10.1.8.11 client.stj.cloud client

验证

[root@client ~ 10:02:51]# curl http://www1.stj.cloud
www1.stj.cloud
[root@client ~ 10:03:20]# curl http://www2.stj.cloud
www2.stj.cloud

基于端口的虚拟主机

复制配置文件模板到虚拟主机配置文件 vhost-port.conf

[root@server ~ 09:53:03]# cp /etc/nginx/nginx.conf /etc/nginx/conf.d/vhost-port.conf

修改 vhost-port.conf 虚拟主机配置文件

[root@server ~ 09:57:40]# vim /etc/nginx/conf.d/vhost-port.conf
[root@server ~ 17:16:42]# cat /etc/nginx/conf.d/vhost-port.conf 
server {
    listen       8081;
    server_name  www.stj/cloud;
    root         /usr/share/nginx/8081;
}
server {
    listen       8082;
    server_name  www.stj/cloud;
    root         /usr/share/nginx/8082;
}

配置网页,并重启服务

[root@server ~ 10:03:46]# mkdir -p /usr/share/nginx/808{1,2}
[root@server ~ 10:07:49]# cp /usr/share/nginx/html/index.html /usr/share/nginx/8081
[root@server ~ 10:08:03]# cp /usr/share/nginx/html/index.html /usr/share/nginx/8082

[root@server ~ 10:10:17]# echo 8081 > /usr/share/nginx/8081/index.html
[root@server ~ 10:10:26]# echo 8082 > /usr/share/nginx/8082/index.html
[root@server ~ 10:10:36]# systemctl restart nginx

配置客户端域名解析

[root@client ~ 11:29:36]# vim /etc/hosts
[root@client ~ 11:29:42]# cat /etc/hosts
...
10.1.8.10 server.stj.cloud server www1.stj.cloud www2.stj.cloud www.stj.cloud
10.1.8.11 client.stj.cloud client

验证

[root@client ~ 10:10:44]# curl http://www.stj.cloud:8081
8081
[root@client ~ 10:10:56]# curl http://www.stj.cloud:8082
8082

配置SSL/TLS

生成证书

生成私钥 key

[root@server ~ 10:29:54]# openssl genrsa -out www.key 2048

生成请求文件 csr ,CN的值必须是网站域名

[root@server ~ 10:30:44]# openssl req -new -key www.key -out www.csr -subj "/C=CN/ST=JS/L=NJ/O=LM/OU=DEVOPS/CN=www.stj.cloud/emailAddress=stj@stj.cloud"

使用私钥对请求文件签名,以生成证书 crt

[root@server ~ 10:31:28]# openssl x509 -req -days 3650 -in www.csr -signkey www.key -out www.crt

验证生成

[root@server ~ 10:32:15]# ls
anaconda-ks.cfg  inventory.sql  mysql.tar.gz   www.crt  www.csr  www.key

[root@server ~ 10:14:56]# mkdir /etc/ssl/certs/www.stj.cloud
[root@server ~ 10:32:18]# mv www* /etc/ssl/certs/www.stj.cloud

配置站点

配置SSL

[root@server ~ 10:55:33]# cp /etc/nginx/nginx.conf /etc/nginx/conf.d/vhost-www.stj.cloud-ssl.conf
[root@server ~ 10:56:23]# vim /etc/nginx/conf.d/vhost-www.stj.cloud-ssl.conf
[root@server ~ 17:35:02]# cat /etc/nginx/conf.d/vhost-www.stj.cloud-ssl.conf 
server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  www.stj.cloud;
    root         /usr/share/nginx/html;
    
		# 证书
    ssl_certificate "/etc/ssl/certs/www.stj.cloud/www.crt";
		# 私钥
    ssl_certificate_key "/etc/ssl/certs/www.stj.cloud/www.key";
    }
}

# 配置 http 重定向到 https
server {
    listen       80;
    listen       [::]:80;
    server_name  www.stj.cloud;
    root         /usr/share/nginx/html;

		# 重定向
    return      301 https://$host$request_uri;
}

重启服务,并验证

[root@server ~ 10:59:31]# systemctl restart nginx

[root@client ~ 11:01:17]# curl http://www.stj.cloud
[root@client ~ 11:01:26]# curl -k https://www.stj.cloud

Nginx 动态脚本

核心概念与架构

  • Nginx 处理动态内容的方式:

    • Nginx 作为前端服务器,将动态请求转发给后端应用
    • 不直接执行脚本,而是通过协议与后端通信
    • 支持多种协议:FastCGI、uWSGI、SCGI、HTTP 反向代理等
  • 处理流程:

    • Nginx 接收请求
    • 根据 location 匹配规则判断请求类型
    • 静态文件直接返回
    • 动态请求转发给相应后端处理
    • 接收后端响应并返回给客户端

PHP 处理

安装 php 和 php-fpm

[root@server ~ 11:32:57]# yum install -y php php-fpm

查看 php 版本

[root@server ~ 11:33:27]# php -v

测试 php 是否正常

[root@server ~ 11:42:22]# echo "<?php echo 'PHP Test Page'.\"\n\"; ?>" > php_test.php 
[root@server ~ 11:42:48]# php php_test.php
PHP Test Page

修改配置文件,并启用 php-fpm 服务

[root@server ~ 11:48:00]# vim /etc/nginx/conf.d/vhost-www.stj.cloud-ssl.conf 
[root@server ~ 17:55:23]# cat /etc/nginx/conf.d/vhost-www.stj.cloud-ssl.conf 
server {
    listen       443 ssl http2;
    ......
    
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
......


[root@server ~ 11:53:55]# systemctl start php-fpm.service 

设置测试页面,使用 phpinfo 查看详细信息

[root@server ~ 11:42:50]# echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/info.php

重启服务,并测试

[root@server ~ 11:48:29]# systemctl restart nginx
[root@client ~ 11:29:48]# curl http://www.stj.cloud/info.php

反向代理

  • 客户端访问代理服务器,代理服务器会将客户端请求发送给真实服务器

  • 反向代理实现了隐藏内部服务器

角色说明

  • 代理服务器: proxy 10.1.8.20

  • 真实服务器: server 10.1.8.10

代理服务器配置

安装 nginx 软件包,并启用服务

[root@proxy ~ 16:02:36]# yum install -y nginx
[root@proxy ~ 16:02:44]# systemctl enable nginx --now

配置域名解析

[root@proxy ~ 16:02:57]# echo '10.1.8.10 www.stj.cloud' >> /etc/hosts

设置 proxy 代理服务器的配置文件

[root@proxy ~ 16:03:44]# cp /etc/nginx/nginx.conf /etc/nginx/conf.d/proxy.conf
[root@proxy ~ 16:07:46]# vim /etc/nginx/conf.d/proxy.conf 
[root@proxy ~ 16:10:59]# cat /etc/nginx/conf.d/proxy.conf 
server {
    listen       80;
    listen       [::]:80;
    server_name  _;
    root         /usr/share/nginx/html;

    #添加如下内容
    #proxy_redirect      off;
    #proxy_set_header    X-Real-IP $remote_addr;
    #proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    #proxy_set_header    Host $http_host;

    #新增 location 规则
    location /proxy/ {
        proxy_pass http://www.stj.cloud/;
    }
}

重启服务,并验证

[root@proxy ~ 16:11:24]# systemctl restart nginx
[root@proxy ~ 16:24:56]# curl http://www.stj.cloud/proxy/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值