开源
且高性能
、可靠
的HTTP中间件、代理服务。复用
指的是复用同一个线程。worker进程
固定再一个CPU
上执行,减少切换CPU和ache miss,获得更好的性能。whereis nginx
nginx: /usr/sbin/nginx /etc/nginx /usr/share/nginx
路径 | 类型 | 作用 |
---|---|---|
/etc/logrotate.d/nginx | 配置文件 | Nginx日志轮转,用于logrotate服务的日志切割 |
/etc/nginx/nginx.conf | 配置文件 | 主要配置 |
/etc/nginx/conf.d/default.conf | 配置文件 | 默认的配置文件 |
/etc/nginx/conf.d | 目录 | |
/etc/nginx/fastcgi_params | 配置文件 | cgi配置相关、fastcgi配置 |
/etc/nginx/uwsgi_params | 配置文件 | cgi配置相关、fastcgi配置 |
/etc/nginx/scgi_params | 配置文件 | cgi配置相关、fastcgi配置 |
/etc/nginx/koi_utf | 配置文件 | 编码转换映射文件 |
/etc/nginx/koi_win | 配置文件 | 编码转换映射文件 |
/etc/nginx/win_utf | 配置文件 | 编码转换映射文件 |
/etc/nginx/mime.types | 配置文件 | 设置http协议的Countent-Type与扩展名对应关系 |
/usr/sbin/nginx | 命令 | Nginx服务启动管理的终端命令 |
/usr/sbin/nignx-debug | 命令 | Nginx服务启动管理的终端命令 |
/var/cache/nginx | 目录 | Nginx缓存目录 |
/var/log/nginx | 目录 | Nginx日志目录 |
nginx -v: 查看Nginx安装的版本号
nginx -V:查看编译相关的参数(--with-xxx)
nginx开启的模块
编译选项 | 作用 |
---|---|
–prefix=/etc/nginx | nginx主目录 |
–sbin-path=/usr/sbin/nginx | nginx执行目录 |
–modules-path=/usr/lib64/nginx/modules | nginx模块 |
–conf-path=/etc/nginx/nginx.conf | nginx配置目录 |
–error-log-path=/var/log/nginx/error.log | nginx错误日志 |
–http-log-path=/var/log/nginx/access.log | nginx访问日志 |
–pid-path=/var/run/nginx.pid | nginx的PID文件 |
–lock-path=/var/run/nginx.lock | nginx的锁放到哪个路径下 |
–http-client-body-temp-path=/var/cache/nginx/clinent_temp | 执行对应模块时,Nginx所保留的临时文件 |
–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_temo | … |
–user=nginx | 设定Nginx进程启动的用户和用户组 |
–group=nginx | … |
–with-cc-opt=parameters | 设置额外的参数将被添加到CFLAGS变量 |
–with-ld-opt=parameters | 设置附加的参数,链接系统库 |
第一部分系统模块
:
user | 设置nginx服务的系统使用用户 |
---|---|
worker_processes | 工作进程数(一般跟服务器的CPU保持一致就可以) |
error_log | nginx的错误日志 warn:表示nginx错误日志的级别 |
pid | nginx服务启动时候pid |
第二部分事件模块
:
events | worker_connections | 每个进程最大连接数 |
---|---|---|
user | 工作进程数 |
第三部分http{}
内容:
http {
..................
include /etc/nginx/conf.d/*.conf;
server {
listen 80 ; # 监听的是80端口
server_name localhost; # 主机名或者独立域名
location / { # 默认访问的路径一些配置
root /usr/share/nginx/html;
index index.html index.html;
}
# 下面就是访问错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html; # 存放在系统的路径下面
}
}
}
请求行,请求头部,请求数据
状态行、消息报头、响应正文
记录http请求访问的状态,分析客户每一回的访问,行为的请求
log_format main '$remote_addr(客户端地址) - $remote_user(http客户端请求的认证名) [$time_local](nginx时间) "$request(请求行)" '
'$status(response返回的状态) $body_bytes_sent(服务端返回给客户端body信息的大小) "$http_referer(上一级页面的url地址)" '
'"$http_user_agent(客户端用什么来访问)" "$http_x_forwarded_for(携带请求的信息)"';
access_log /var/log/nginx/access.log main; # http请求访问的状态, main就是名字(跟log_format后面名字相同 ), log_format后面的格式(请求的格式),会打入到access.log里面
HTTP请求变量 -arg_PARAMETER、http_HEDER(request里面的heder)、sent_http_HEADER(response里面的heder)
再main
后面添加$http_user_agent'
: 把大写变成小写
把-
变成_
内置变量 - Nginx内置的
自定义变量 - 自己定义
--with--xxx
就是开启的模块编译选项 | 作用 |
---|---|
–with-http_stub_status_module | Nginx的客户端状态 |
location /my {
stub_status;
}
# 输入127.0.0.1/my
random_index_module:
编译选项 | 作用 |
---|---|
–with-http_random_index_module | 目录中选择一个随机主页 |
location / {
root /opt/app/code;
random_index on;
# index index.html index.htm;
}
# 再/opt/app/code/ 有三个html文件, 当访问/ 的时候出随机出现下面这三个html(注意如果html是隐藏文件的话,识别不了)
http_sub_module模块:
编辑选项 | 作用 |
---|---|
–with-http_sub_module | HTTP内容替换 |
语法:
Syntax: sub_filter string replacement;
Default:-
Context:http, server, location
location / {
root /opt/app/code;
index index.html index.htm;
sub_filter 'json' 'JSON';
}
# 再root /opt/app/code 新创建sub.html 文件就是下面的栗子 替换json 变成JSON
<html>
<head>
<mate charset="utf-8">
<title>heiheititle>
head>
<a>jsona>
<a>ata>
<a>heiheia>
<a>ata>
<a>jsona>
body>
html>
# 再网页上输入127.0.0.1/sub.html
JSON at heihei at json # 代表已经替换成功了 可是发现一个文件就是有两个json 只是替换了一个
语法(主要用于cache):
语法(匹配所有html代码中如果是on就匹配第一个,如果是off匹配所有的):
HTTP请求建立再一次TCP连接基础上
一次TCP请求至少产生一次HTTP请求
HTTP协议请求 | 连接关系 |
---|---|
HTTP1.0 | TCP不能复用 |
HTTP1.1 | 顺序性TCP复用 |
HTTP2.0 | 多路复用TCP复用 |
语法:
语法:
Syntax:limit_conn_zone number;
Default:-
Context: http, server , location
limit_conn_zone $binary_remote_addr zone=conn_zone:1m;
# HTTP 服务器
server {
# 监听80端口, 80端口是知名端口, 用于HTTP协议
listen 80;
# 定义使用www.xx.com访问
server_name localhost;
location / {
root html;
index index.html index.htm;
limit_conn conn_zone 1; # 指服务端,同一时刻只允许连接一个ip过来
}
语法:
Syntax:limit_req_zone key zone=name:size rate=rate;
Default:-
Context:http
limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s; # 请求频率的限制
# HTTP 服务器
server {
# 监听80端口, 80端口是知名端口, 用于HTTP协议
listen 80;
# 定义使用www.xx.com访问
server_name localhost;
location / {
root /opt/app/code;
index index.html index.htm;
limit_req zone=req_zone; # 只能访问一次,当再访问403
}
语法:
Syntax:limit_req zone=name [burst=number], [ nodelay]
Defalut:-
Context:http, server ,location
location / {
root /opt/app/code;
index index.html index.htm;
limit_req zone=req_zone burst=3 nodelay; # burst=3:表示客户端访问3次后,在一秒执行,启到延迟作用 nodelay:就是直接返回503
}
允许访问语法:
Syntax:allow address(IP地址) | CIDR(网段进行配置) |unix:(socket) |all(所有的);
Default:-
Context:http, server , location, limit_except
location / {
root html;
index index.html index.htm;
}
location ~ ^/admin.html {
root /opt/app/code;
allow 192.168.37.129; # 只允许192.168.37.129访问
deny all; # 除了上面的都不能访问
index index.html index.htm;
}
不允许访问的语法:
Syntax: deny address | CIDR | unix: | all;
Default: -
Context:http , server , location, limit_except
location / {
root html;
index index.html index.htm;
}
location ~ ^/admin.html {
root /opt/app/code;
deny 192.168.37.129; # 不允许访问的IP地址
allow all; # 除了deny中的IP地址以外都可以访问
index index.html index.htm;
}
http_access_module局限性
:
http_x_forwarded_for
:
解决http_access_module局限性:
HTTP_X_FORWARD_FOR
geo模块作
HTTP自定义变量传递
语法(前端字符串认证):
语法(通过文件,存储用户密码信息的文件):
首先我再ubuntu系统:
htpasswd
:
apt install apache2-utils
/etc/nginx/
创建一个用户名密码文件:
htpasswd -c ./auth_conf lh9
举个栗子(当再打开127.0.0.1/admin.html 会有账号密码,输入成功就会跳转到这个页面):
location ~ ^/admin.html {
root /opt/app/code;
auth_basic "Auth access test! input your passward!"; # 前端字符串认证
auth_basic_user_file /etc/nginx/auth_conf; # 通过文件,存储用户密码信息的文件
index index.html index.htm;
}
http_auth_basic_module
局限性:
一、用户信息依赖文件方式
二、操作管理机械、效率低下
解决方案:
一、Nginx结合LUA实现高效验证
二、Nginx和LDAP打通,利用nginx-auth-ldap模块