提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
vim /usr/local/nginx/conf/nginx.conf
#运行用户,若编译时未指定则默认为 nobody #user nobody; #工作进程数量,可配置成服务器内核数 * 2,如果网站访问量不大,一般设为1就够用了 worker_processes 4; #错误日志文件的位置 #error_log logs/error.log; #PID 文件的位置 #pid logs/nginx.pid;
拓展:
2p:2个物理cpu
4c:1个物理核有4个核心,一共有2*4=8个逻辑核
例:4c、16G 硬盘是高效盘,相当于系统盘
存储:oss
网络存储:nas
用什么机器:私有云
events { #使用 epoll 模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能 use epoll; #每个进程处理 4096 个连接 2000 worker_connections 4096; } #如提高每个进程的连接数还需执行“ulimit -n 65535”命令临时修改本地每个进程可以同时打开的最大文件数。 #在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。 #可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。 /etc/security/limits.conf #epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。 若工作进程数为 8,每个进程处理 4 096 个连接,则允许 Nginx 正常提供服务的连接数 已超过 3 万个(4 096×8=32 768),当然具体还要看服务器硬件、网络带宽等物理条件的性 能表现。
**注意:**临时修改内核的大小:ulimit -n
永久修改内核的大小:/etc/security/limits.conf
查看内核的大小:ulimit -a
如果编辑文件时出现“注意”的可以使用:rm -rf /usr/local/nginx/conf/.nginx.conf.swp————删除这个生成的文件
使用“http { }”界定标记,包括访问日志、HTTP 端口、网页目录、默认字符集、连接保持,以及后面要讲到的虚拟 Web 主机、PHP 解析等一系列设置,其中大部分配置语句都包含在子界定标记“server { }”内
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; ##此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用 #tcp_nopush on; ##连接保持超时时间,单位是秒 #keepalive_timeout 0; keepalive_timeout 65; ##gzip模块设置,设置是否开启gzip压缩输出 #gzip on; ##Web 服务的监听配置 server { ##监听地址及端口 listen 80; ##站点域名,可以有多个,用空格隔开 server_name www.ff.com; ##网页的默认字符集 charset utf-8; ##根目录配置 location / { ##网站根目录的位置/usr/local/nginx/html root html; ##默认首页文件名 index index.html index.php; } ##内部错误的反馈页面 error_page 500 502 503 504 /50x.html; ##错误页面配置 location = /50x.html { root html; } }用来记录客户端用户名称; }
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。 location常见配置指令,root、alias、proxy_pass root(根路径配置):root /var/www/html 请求www.kgc.com/test/1.html,会返回文件/var/www/html/test/1.html alias(别名配置):alias /var/www/html 请求www.kgc.com/test/1.html,会返回文件/var/www/html/1.html proxy_pass(反向代理配置)
HTTP主要有压缩、日志、超时模块
日志格式就是客户端访问网页时访问的是前端,前端要调用后端,因此后端需要客户端的请求信息,则在前端就需要规定日志的格式文件
访问的时候会放在缓存服务器中直接在缓存里面取不用再加载,大量的访问会在缓存里不会造成奔溃等
socket接口=ip地址加端口号
客户端直接访问缓存
首先,使用/usr/local/nginx/sbin/nginx -V 来查看之前安装是否包含 --with-http_stub_status_module(开启访问状态统计模块)
修改/usr/local/nginx/conf/nginx.conf 配置文件 指定访问位置并添加stub_status的配置
先备份配置文件,防止文件出错。
#备份配置文件 cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak vim /usr/local/nginx/conf/nginx.conf #添加以下配置 location /status { stub_status on; access_log off; } #检查语法 nginx -t #重新启动 systemctl restart nginx.service
特点:对访问用户目录权限的控制
认证方式是:用户名和密码,用htpasswd命令,htpasswd是一个用于目录访问权限认证的一个工具。
-c 用于创建密码文件,如果文件已存在,会覆盖。
查看系统是否有该命令,若没有请安装httpd-tools依赖包
#检测是否存在 [root@test3 opt]# which htpasswd /usr/bin/which: no htpasswd in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin) #不存在安装 [root@test3 opt]# yum -y install httpd-tools [root@test3 opt]# which htpasswd /usr/bin/htpasswd
#创建用户设置密码 [root@test3 opt]# htpasswd -c /usr/local/nginx/passwd.db qing #输入新密码 New password: #确认密码 Re-type new password: #创建成功 Adding password for user xue
[root@test3 opt]# chown nginx /usr/local/nginx/passwd.db [root@test3 opt]# chmod 400 /usr/local/nginx/passwd.db
修改nginx主配置文件添加访问控制配置(在对应的location位置,想对哪个location访问控制,就在哪个location里配置)
对访问状态统计页面进行控制,配置如下
vim /usr/local/nginx/conf/nginx.conf location /status { auth_basic "secret"; #设置路径 auth_basic_user_file /usr/local/nginx/passwd.db; stub_status on; access_log off; }
nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful systemctl restart nginx.service
deny是拒绝某一个IP地址、某一个网段客户机访问
allow允许某一个IP地址、某一个网段客户机访问
规则匹配顺序,从上往下,匹配即停止。
需求:添加一条规则拒绝192.168.245.111IP的主机访问
#在此location位置配置规则 location / { root html; index index.html index.htm index.php; #拒绝192.168.245.111 deny 192.168.245.111; #允许访问所有IP allow all; } systemctl restart nginx.service
在192.168.245.111虚拟机测试
基于域名:域名不同,IP地址相同,端口相同
修改 /etc/hosts 文件,添加域名与IP的本地映射
echo "192.168.245.110 www.zzq.com" >> /etc/hosts echo "192.168.245.110 www.zqq.com" >> /etc/hosts
mkdir -p /var/www/html/zzq mkdir -p /var/www/html/zqq echo "www.zzq.com
" >> /var/www/html/zzq/index.html echo "www.zqq.com
" >> /var/www/html/zqq/index.html
vim /usr/local/nginx/conf/nginx.conf
server { listen 192.168.245.110:80; server_name www.zzq.com; access_log logs/zzq.access.log; charset utf-8; location / { root /var/www/html/zzq; index index.html index.htm index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 192.168.245.110:80; server_name www.zqq.com; charset utf-8; access_log logs/zqq.access.log; location / { root /var/www/html/zqq; index index.html index.htm index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful systemctl restart nginx.service
现在监控的是IP加端口——基于IP地址的不同端口
ifconfig ens33:0 192.168.245.200 netmask 255.255.255.0
修改nginx主配置文件 www.zzq.com 配置的IP地址为192.168.245.110
vim /usr/local/nginx/conf/nginx.conf server { listen 192.168.245.200:80; server_name www.zzq.com; charset utf-8; access_log logs/zzq.access.log; location / { root /var/www/html/zzq; index index.html index.htm index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful systemctl restart nginx.service
不同端口同ip
基于端口虚拟机,只管端口
修改nginx主配置文件www.zzq.com配置的IP地址为192.168.245.110 端口为8080
server { listen 192.168.245.110:8080; server_name www.zzq.com; charset utf-8; access_log logs/zzq.access.log; location / { root /var/www/html/zzq; index index.html index.htm index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful systemctl restart nginx.service