首页 > 数据库 > 数据库开发技术 > Nginx 一把梭:超详细讲解与实操
Nginx(发音同 "engine x")是一款由俄罗斯程序设计师Igor Sysoev开发的高性能HTTP和反向代理服务器,同时也提供了IMAP/POP3/SMTP代理服务。Nginx以其轻量级、高并发、低资源消耗和强大的反向代理及负载均衡能力而著称,广泛应用于互联网项目中。Nginx支持热部署,启动极快,可以7x24小时不间断运行,是构建高可用、高并发Web服务的理想选择。
以CentOS 7系统为例,安装Nginx的步骤如下:
安装必要的依赖:
yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
下载并解压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
编译并安装Nginx:
./configure --prefix=/usr/local/nginx
make && make install
启动Nginx:
/usr/local/nginx/sbin/nginx
检查Nginx是否启动成功:
ps aux | grep nginx
访问Nginx欢迎页面:
在浏览器中访问 http://你的服务器IP,如果看到Nginx的欢迎页面,说明安装成功。
Nginx的配置文件主要位于/usr/local/nginx/conf/nginx.conf,下面是一些常用的配置指令和示例。
全局块主要设置Nginx运行的一些基本参数,如用户、工作进程数、错误日志等。
user nobody;
worker_processes 1;
error_log logs/error.log;
pid logs/nginx.pid;
events块主要设置Nginx的事件处理机制,如连接数、多路复用模型等。
events {
worker_connections 1024;
use epoll; # 在Linux系统下推荐使用epoll
}
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;
}
}
}
反向代理和负载均衡是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;
}
}
}
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;
}
}
}
通过配置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;
}
# 其他配置...
}
}
动静分离是指将静态文件和动态内容分开处理,以提高网站访问速度。
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;
}
}
}
通过配置deny和allow指令,可以实现IP访问控制,即黑白名单功能。
server {
listen 80;原文作者:后端Q;如有侵权,请联系管理员删除。