NGINX基础
安装
-
CentOS7下安装官网稳定版
-
安装先决条件
sudo yum install yum-utiles
-
设置nginx官方源,修改
/etc/yum.repos.d/nginx.repo
,添加以下内容:[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
-
如果想要安装
mainline
版本,运行:sudo yum-config-manager --enable nginx-mainline
-
安装稳定版本nginx,运行以下命令:
sudo yum install nginx
-
安装目录和编译参数
目录详解
- 运行命令
rpm -ql nginx
,查看nginx安装目录:
路径 | 类型 | 作用 |
---|---|---|
/etc/logrotate.d/nginx | 配置文件 | Nginx日志轮转,用于logrotate服务的日志切割 |
/etc/nginx /etc/nginx/nginx.conf /etc/nginx/conf.d /etc/nginx/conf.d/default.conf |
目录、配置文件 | Nginx主配置文件 |
/etc/nginx/fastcgi_params /etc/nginx/scgi_params /etc/nginx/uwsgi_params |
配置文件 | cgi配置相关,fastcgi配置 |
/etc/nginx/koi-utf /etc/nginx/koi-win /etc/nginx/win-utf |
配置文件 | 编码转换映射转化文件 |
/etc/nginx/mime.types | 配置文件 | 设置http协议的Content-Type与扩展名的对应关系 |
/usr/lib/systemd/system/nginx-debug.service /usr/lib/systemd/system/nginx.service /etc/sysconfig/nginx /etc/sysconfig/nginx-debug |
配置文件 | 用于配置出系统守护进程管理器管理方式 |
/usr/sbin/nginx /usr/sbin/nginx-debug |
命令 | Nginx服务的启动管理的终端命令 |
/usr/share/doc/nginx-1.16.1 /usr/share/doc/nginx-1.16.1/COPYRIGHT /usr/share/man/man8/nginx.8.gz |
文件、目录 | Nginx的手册和帮助文件 |
/var/cache/nginx | 目录 | Nginx的缓存目录 |
/var/log/nginx | 目录 | Nginx的日志目录 |
编译参数详解
- 运行
nginx -V
,查看nginx编译参数:
编译选项 | 目录 |
---|---|
--prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock |
安装目的目录或路径 |
--http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp |
执行对应模块时,Nginx所保留的临时性文件 |
--user=nginx --group=nginx |
设定Nginx进程启动的用户和组用户 |
NGINX配置
打开/etc/nginx/nginx.conf
:
user nginx; # 配置用户或者组,默认为nobody nobody
worker_processes 1; # 允许生成的进程数,默认为1
# 这个设置可以放入全局块,http块,server块 ↓
# debug|info|notice|warn|error|crit|alert|emerg ↓
error_log /var/log/nginx/error.log warn; #制定日志路径,级别
pid /var/run/nginx.pid; # 指定nginx进程运行文件存放地址
events {
accept_mutex on; # 设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; # 设置一个进程是否同时接受多个网络连接,默认为off
use epoll; # 事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; # 最大连接数,默认为512
}
http {
include /etc/nginx/mime.types; # 文件扩展名与文件类型映射表
default_type application/octet-stream; # 默认文件类型,默认为text/plain
access_log off; # 取消服务日志
# 自定义格式 ↓
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 /var/log/nginx/access.log main; # combined为日志格式的默认值
sendfile on; # 允许sendfile方式传输文件,默认为off,可以在http块,server块,location块
sendfile_max_chunk 100k; # 每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; # 连接超时时间,默认为75s,可以在http,server,location块
gzip on; # 是否启用gzip压缩传输
include /etc/nginx/conf.d/*.conf; # 导入/etc/nginx/conf.d/目录下的所有conf文件配置
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
error_page 500 502 503 504 /50x.html; #错误页
server {
keepalive_requests 120; #单连接请求上限次数。
listen 4545; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
root /usr/share/nginx/html; #根目录
index index.html index.htm; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
}
NGINX日志
类型
error.log、access_log
配置
-
模块:
HTTP模块
下 -
语法:
log_format name [escape=default|json] string...;
:自定义配置
access_log path name
:配置logname
: 自定义变量名path
:log存放路径[escape=default|json] string
:配置项
NGINX模块
http_sub_status_module
-
作用:Nginx客户端状态
-
配置语法
Syntax
:sub_status;
Default
:—
Context
:server, location
http_random_index_modulie
-
作用:目录中选择一个随机主页
-
配置语法
Syntax
:random_index on|off;
Default
:random_index off;
Context
:location
http_sub_modulie
-
作用:HTTP内容替换
-
配置语法
Syntax
:sub_filter string replacment
Default
:—
Context
:http, server, location
Syntax
:sub_filter_last_modified on|off
Default
:sub_filter_last_modified off
Context
:http, server, location
Syntax
:sub_filter_once on|off
Default
:sub_filter_once on
Context
:http, server, location
NGINX请求限制
连接频率限制 - limit_conn_module
Syntax
:limit_conn_zone key zone=name:size;
Default
:—
Context
:http
Syntax
:limit_conn_zone number;
Default
:—
Context
:http, server, location
请求频率限制 - limit_req_module
Syntax
:limit_req_zone key zone=name:size rate=rate;
Default
:—
Context
:http
Syntax
:limit_req key zone=name [burst=number] [nodelay];
Default
:—
Context
:http, server, location
NGINX访问控制
基于IP的访问控制 - http_access_module
Syntax
:allow address|CIDR|unix:|all;
Default
:——
Context
:http, server, location, limit_except
Syntax
:deny address|CIDR|unix:|all;
Default
:——
Context
:http, server, location, limit_except
- 局限性:只能通过
$romote_addr
控制信任 - 解决方法:
- 采用HTTP头信息控制访问,例如
http_x_forwarded_for
- 结合geo模块做
- 通过HTTP自定义变量传递
- 采用HTTP头信息控制访问,例如
基于用户的信任登录 - http_auth_basic_module
Syntax
:auth_basic string|off;
Default
:——
Context
:server, location, limit_except
Syntax
:auth_basic_user_file file;
Default
:——
Context
:server, location, limit_except
- 局限性:
- 用户信息依赖文件方式
- 维护单独的用户登录信息文件,效率低
- 解决方案:
- NGINX结合LUA进行验证
- NGINX和LDAP打通,利用nginx-auth-ldap模块