ITPub博客

首页 > 数据库 > 数据库开发技术 > Nginx 一把梭:超详细讲解与实操

Nginx 一把梭:超详细讲解与实操

原创 数据库开发技术 作者:后端Q 时间:2024-10-10 00:00:00 0 删除 编辑

一、Nginx 简介

Nginx(发音同 "engine x")是一款由俄罗斯程序设计师Igor Sysoev开发的高性能HTTP和反向代理服务器,同时也提供了IMAP/POP3/SMTP代理服务。Nginx以其轻量级、高并发、低资源消耗和强大的反向代理及负载均衡能力而著称,广泛应用于互联网项目中。Nginx支持热部署,启动极快,可以7x24小时不间断运行,是构建高可用、高并发Web服务的理想选择。

二、Nginx 的核心特性

  1. 高性能:Nginx 采用异步非阻塞I/O模型,支持事件驱动,能够处理大量并发连接。
  2. 低资源消耗:Nginx 的内存占用少,CPU使用效率高。
  3. 模块化设计:Nginx 的功能通过模块实现,模块之间高内聚、低耦合,方便扩展和定制。
  4. 反向代理:Nginx 可以作为反向代理服务器,隐藏后端服务器的真实地址,提高安全性和统一管理性。
  5. 负载均衡:Nginx 支持多种负载均衡策略,如轮询、权重分配、IP哈希等,能够有效分担后端服务器的负载。
  6. 动静分离:Nginx 可以将静态文件和动态内容分开处理,提高网站访问速度。
  7. 缓存:Nginx 支持缓存功能,可以减少对后端服务器的请求,提高响应速度。
  8. 跨域:Nginx 可以配置跨域资源共享(CORS),解决前后端分离开发中的跨域问题。

三、Nginx 的安装与配置

3.1 安装 Nginx

以CentOS 7系统为例,安装Nginx的步骤如下:

  1. 安装必要的依赖:

    yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
  2. 下载并解压Nginx源码包:

    wget https://nginx.org/download/nginx-1.24.0.tar.gz
    tar -zxvf nginx-1.24.0.tar.gz
    cd nginx-1.24.0
  3. 编译并安装Nginx:

    ./configure --prefix=/usr/local/nginx
    make && make install
  4. 启动Nginx:

    /usr/local/nginx/sbin/nginx
  5. 检查Nginx是否启动成功:

    ps aux | grep nginx
  6. 访问Nginx欢迎页面:

    在浏览器中访问 http://你的服务器IP,如果看到Nginx的欢迎页面,说明安装成功。

3.2 配置 Nginx

Nginx的配置文件主要位于/usr/local/nginx/conf/nginx.conf,下面是一些常用的配置指令和示例。

3.2.1 全局块

全局块主要设置Nginx运行的一些基本参数,如用户、工作进程数、错误日志等。

user nobody;
worker_processes 1;
error_log logs/error.log;
pid logs/nginx.pid;

3.2.2 events 块

events块主要设置Nginx的事件处理机制,如连接数、多路复用模型等。

events {
worker_connections 1024;
use epoll; # 在Linux系统下推荐使用epoll
}

3.2.3 http 块

http块是Nginx配置的核心部分,包含了服务器、虚拟主机、location等配置。

http {
include mime.types;
default_type application/octet-stream;
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 logs/access.log main;
sendfile on;
keepalive_timeout 65;

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

server {
listen 80;
server_name localhost;

location / {
root html;
index index.html index.htm;
}

location /api/ {
proxy_pass http://backend_server;
proxy_set_header Host $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;
}

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

3.2.4 反向代理与负载均衡

反向代理和负载均衡是Nginx的强大功能之一。通过配置upstream块和location块,可以实现反向代理和负载均衡。

http {
upstream backend_server {
server 192.168.1.100:8080 weight=1;
server 192.168.1.101:8080 weight=2;
}

server {
listen 80;
server_name

location / {
proxy_pass http://backend_server;
proxy_set_header Host $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;
}
}
}

3.2.5 缓存配置

Nginx的缓存功能可以减少对后端服务器的请求,提高响应速度。

http {
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

server {
listen 80;
server_name

location / {
proxy_pass http://backend_server;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_key "$scheme$request_method$host$request_uri";
add_header X-Cache-Status $upstream_cache_status;
}
}
}

3.2.6 跨域配置

通过配置add_header指令,可以实现跨域资源共享(CORS)。

server {
listen 80;
server_name

location / {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
if ($request_method = 'OPTIONS') {
return 204;
}
# 其他配置...
}
}

四、Nginx 的高级特性与实操

4.1 动静分离

动静分离是指将静态文件和动态内容分开处理,以提高网站访问速度。

http {
upstream backend_server {
server 192.168.1.100:8080;
}

server {
listen 80;
server_name

location / {
root html;
index index.html index.htm;
}

location /static/ {
alias /data/nginx/static/;
}

location /api/ {
proxy_pass http://backend_server;
proxy_set_header Host $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;
}
}
}

4.2 黑白名单

通过配置deny和allow指令,可以实现IP访问控制,即黑白名单功能。

server {
listen 80;


原文作者:后端Q;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2023-01-22

  • 博文量
    1540
  • 访问量
    736429