欢迎光临
我们一直在努力

Nginx 服务器

文章目录

  • Nginx 服务器
    • Nginx 介绍
    • Nginx 配置文件
    • 安装 Nginx
    • Nginx 虚拟主机设置
      • 基于域名的虚拟主机
      • 基于端口的虚拟主机
    • 配置SSL/TLS
      • 生成证书
      • 配置站点
    • Nginx 动态脚本
      • 核心概念与架构
      • PHP 处理
    • 反向代理
      • 角色说明
      • 代理服务器配置

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/

赞(0)
未经允许不得转载:171主机测评 » Nginx 服务器
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址