目录
一.nginx 有多种模块
-
HttpCoreModule:这是Nginx的核心模块,负责处理HTTP请求和响应。
-
HttpAccessModule:用于配置访问控制规则,允许或拒绝特定的客户端访问。
-
HttpSSLModule:提供SSL和TLS支持,用于配置HTTPS连接和SSL证书。
-
HttpRewriteModule:用于重写URL,可以重定向请求、修改请求参数等。
-
HttpProxyModule:用于设置反向代理,将请求转发给其他服务器(如应用服务器)进行处理。
-
HttpFastCGIModule:支持FastCGI协议,用于与FastCGI进程通信,适用于运行PHP等脚本的情况。
-
HttpGzipModule:用于压缩HTTP响应,减小传输数据的大小,提高网站性能。
-
HttpCacheModule:提供HTTP缓存功能,可以缓存静态内容或动态内容的响应,减轻服务器负载。
-
HttpHeadersMoreModule:允许修改HTTP响应头,添加、删除或修改HTTP头信息。
-
HttpSecurityModule:提供安全相关功能,包括防止恶意请求、限制访问速率等。
二.Nginx配置文件
编译安装主配置文件位置
/apps/nginx/conf
主配置文件格式
main block:主配置段,即全局配置段,对http,mail都有效
#事件驱动相关的配置 同步
event {
...
}
#http/https 协议相关配置段
http {
...
}
#默认配置文件不包括下面两个块
#mail 协议相关配置段
mail {
...
}
#stream 服务器相关配置段
stream {负载均衡
...
}
yum安装主配置文件位置
/etc/nginx/nginx.conf
子配置文件: include conf.d/*.conf
三.Nginx优化
1.修改启动的工作进程数(优化)
worker_processes 1;
#允许的启动工作进程数数量,和你真实的cpu数量有关 1
worker_processes auto;
#如果设置为auto 就是你真实的cpu数量
cd /apps/nginx/conf/
vim nginx.conf
nginx -s reload
#重载
ps axo pid,cmd,psr,ni|grep nginx
#查看工作进程的数量
2.cpu与worker process 绑定 (优化)
在 Nginx 配置文件中,worker_cpu_affinity
指令用于控制 worker 进程与 CPU 的亲和性(affinity)关系
worker_cpu_affinity 00000001 00000010;
#绑定到 第一 和 第二块cpu上
3.PID路径修改
vim /etc/nginx/nginx.conf
4.修改进程优先级
nice的优先级是 -20 到 19
worker_priority 0;
#工作进程优先级,-20~20(19)
默认优先级为0
ps axo pid,cmd,psr,ni|grep nginx|sort -n
#查看优先级
5.调试工作进程中打开的文件个数
所有worker进程能打开的文件数量上限,包括:Nginx的所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接,另一个考虑因素是实际的并发连接数不能超过系统级别的最大打开文件数的限制.最好与ulimit -n 或者limits.conf的值保持一致
先修改主配置文件
vim nginx.conf
添加
worker_rlimit_nofile 65536
再修改系统配置项
临时修改
ulimit -n 60000
#修改单个进程能打开的最大文件数为 60000
#仅应用于当前会话即不会永久修改限制
ulimit -a
#显示当前用户的所有资源限制信息
永久修改,修改pam认证模块
vim /etc/security/limits.conf
reboot重启生效
6.服务是否以后台方式运行
加入 daemon off; 选项
7.是否开启master-worker工作模式
master_process off|on;
#是否开启Nginx的master-worker工作模式,仅用于开发调试场景,默认为on
四.event事件
在Nginx的主配置文件中,events部分用于配置Nginx服务器的事件模块相关参数,控制Nginx服务器在处理连接请求时的行为。
常见的events配置参数:
worker_connections:指定每个工作进程可以同时处理的最大连接数。
multi_accept:指定是否一次接受多个连接。默认情况下,Nginx在每个循环中只接受一个连接,但设置multi_accept为"on"后可以同时接受多个连接。
use:指定Nginx使用的事件模块。常见的事件模块有"epoll"、"kqueue"和"eventport"等。
events {
worker_connections 65536; #设置单个工作进程的最大并发连接数
use epoll;
#使用epoll事件驱动,Nginx支持众多的事件驱动,
比如:select、poll、epoll,只能设置在events模块中设置。
accept_mutex on;
#on为同一时刻一个请求轮流由work进程处理,而防止被同时唤醒所有worker,
避免多个睡眠进程被唤醒的设置,默认为off,新请求会唤醒所有worker进程,
此过程也称为"惊群",因此nginx刚安装完以后要进行适当的优化。建议设置为on
multi_accept on;
#ON时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,
此指令默认为off,即默认为一个工作进程只能一次接受一个新的网络连接,
打开后几个同时接受多个。建议设置为on
}
五.http设置
1.http部分详细解析
include:引入其他配置文件,通常用于加载 MIME 类型配置文件。
default_type:指定默认的 MIME 类型。
server:定义一个或多个虚拟主机。
listen:指定该虚拟主机监听的端口。
server_name:指定域名,用于匹配请求的主机头。
root:指定虚拟主机的根目录。
location:用于匹配不同的 URL,并定义相关配置规则
http {
...
... #各server的公共配置
server { #每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器
...
}
server {
...
server_name #虚拟主机名
root #主目录
alias #路径别名
location [OPERATOR] URL { #指定URL的特性
...
if CONDITION {
...
}
}
}
}
http协议配置说明
http {
include mime.types; #导入支持的文件类型,是相对于/apps/nginx/conf的目录
default_type application/octet-stream; #除mime.types中文件类型外,设置其它文件默认类型,访问其它类型时会提示下载不匹配的类型文件
#日志配置部分
#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;
#tcp_nopush on; #在开启了sendfile的情况下,合并请求后统一发送给客户端。
#tcp_nodelay off; #在开启了keepalived模式下的连接是否启用TCP_NODELAY选项,当为off时,延迟0.2s发送,默认On时,不延迟发送,立即发送用户响应报文。
#keepalive_timeout 0;
keepalive_timeout 65 65; #设置会话保持时间,第二个值为响应首部:keepAlived:timeout=65,可以和第一个值不同
#gzip on; #开启文件压缩
server {
listen 80; #设置监听地址和端口
server_name localhost; #设置server name,可以以空格隔开写多个并支持正则表达式,如:*.kgc.com www.kgc.* ~^www\d+\.kgc\.com$ default_server
#charset koi8-r; #设置编码格式,默认是俄语格式,建议改为utf-8
#access_log logs/host.access.log main;
location /fxj { www.ky31.com/fsj /apps/nginx/html
root /data;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; #定义错误页面
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ { #以http的方式转发php请求到指定web服务器
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ { #以fastcgi的方式转发php请求到php处理
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht { #拒绝web形式访问指定文件,如很多的网站都是通过.htaccess文件
来改变自己的重定向等功能。
# deny all;
#}
location ~ /passwd.html {
deny all;
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server { #自定义虚拟server
3.3.1 MIME
范例: 识别php文件为text/html
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm; #指定默认网页文件,此指令由
ngx_http_index_module模块提供
# }
#}
# HTTPS server
#
#server { #https服务器配置
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
2.mine
此项为支持的 文件格式,如果不支持的格式 会自动帮你下载,如果支持 就会显示在网页上
3.server下的root
root指定
root路径格式 指定文件的路径 url
Syntax: root path;
Default:
root html;
Context: http, server, location,
指明 你软件的根目录
4.构建虚拟主机
server块构建虚拟主机
4.1基于域名的虚拟主机
以电脑端和手机端为例
[root@localhost ~]#vim /etc/nginx/nginx.conf
#修改配置文件 要放在 http 模块里
include /etc/nginx/mime.types;
include /apps/nginx/conf.d/*.conf;
cd /etc/nginx/conf.d
vim pc.conf
vim sj.conf
#编写pc端配置文件
server {
listen 80;
server_name localhost;
root /data/nginx/html/pc/;
}
#也可以使用location模块
server {
listen 192.168.240.11:80;
server_name www.pc.com;
location / {
root /data/nginx/html/pc;
}
}
编写手机端配置文件
server {
listen 80;
server_name www.sjcxk.com;
root /data/nginx/html/sj/;
}
去往另一台机器修改 /etc/hosts 文件
本机重启nginx
nginx -s reload
测试机
curl www.pc.com
curl www.sj.com
4.2基于端口
添加修改端口号
修改手机端配置文件
电脑端不变
本机重启nginx
nginx -s reload
测试机
curl www.pc.com
curl www.sj.com
4.3基于ip地址
临时添加网卡
ifconfig ens33:0 192.168.240.100/24
修改配置文件
修改手机端
电脑端不修改,到测试机修改配置文件/etc/hosts文件
本机重启nginx
nginx -s reload
测试机
curl 192.168.240.11
curl 192.168.240.100
5.alias别名
在nginx中alias是用于创建一个路径别名的指令
别名设置
服务端
server {
listen 80;
server_name www.pc.com;
location /news{
alias /data/nginx/html/pc/;
#相当于替换 你访问 news 就是访问/data/nginx/html/pc/
}
}
6.location匹配
在 Nginx 中,location
模块用于配置基于请求 URI 的位置匹配规则。它允许开发者定义不同的行为以响应特定 URI 或者 URI 模式的请求
#location官方帮助
http://nginx.org/en/docs/http/ngx_http_core_module.html#location
语法规则:
#语法规则:
location [ = | ~ | ~* | ^~ ] uri { ... }
= #用于标准url前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立即处理请求
^~ #用于标准url前,表示包含正则表达式,并且匹配以指定的正则表达式开头,对URI的最左边部分做匹配检查,不区分字符大小写
~ #用于标准url前,表示包含正则表达式,并且区分大小写
~* #用于标准url前,表示包含正则表达式,并且不区分大写
不带符号 #匹配起始于此uri的所有的uri
#\ #用于标准url前,表示包含正则表达式并且转义字符。可以将 . * ?等转义为普通符号
#匹配优先级从高到低:
=, ^~, ~/~*, 不带符号
分为前缀匹配和正则匹配
前缀匹配有 = ^~ 不带符号
正则匹配有 ~/~*
当前缀匹配匹配到 = 精准匹配时则直接匹配不进行正则匹配
当前缀匹配最长前缀匹配为^~时则匹配^~不进行正则匹配
当前缀匹配最长前缀匹配位不带符号时则记录不带符号开启正则匹配
正则匹配成功则使用正则匹配,否则使用不带符号匹配
7.基于四层访问控制模块 access
在Nginx中,access
模块用于配置访问控制规则,允许或拒绝特定的客户端对服务器资源的访问。通过access
模块,你可以根据客户端的IP地址、用户代理、请求方式等条件来控制对服务器资源的访问权限。
allow:允许特定的客户端访问服务器资源。
deny:拒绝特定的客户端访问服务器资源。
satisfy:指定满足allow
和deny
指令的条件之一即可访问资源,还是需要同时满足所有条件才能访问资源。
示例:
允许192.168.240.13和10.0.0.1地址对服务器资源访问
拒绝其他客户端访问
当使用192.168.240.12对服务器进行访问时403报错权限拒绝