1.Nginx概述
1.1nginx简介
一个高性能的 HTTP 和反向代理服务器。
- 稳定性高
- 系统资源消耗低(占有内存少,并发能力强)
- 对HTTP并发连接的处理能力高
- 单台物理服务器可支持30 000~50 000个并发请求。
- Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器
补充:
Tengine:基于nginx的二次开发
Tengine 是由淘宝网发起的 Web 服务器项目。它在 Nginx 的基础上,针对大访问量网站的需求,添
加了很多高级功能和特性。Tengine 的性能和稳定性已经在大型的网站如淘宝网、天猫商城等得到了很好
的检验。
1.2Nginx与Apache的区别
- Nginx是一个甚于事件的Web服务器,Apache是一个基于流程的服务器;
- Nginx所有请求都由一个线程处理,Apache单个线程处理单个请求;
- Nginx避免子进程的概念,Apache是基于子进程的;
- Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般;
- Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件;
- Nginx支持热部署,Apache不支持热部署;
- Nginx对于静态文件处理具有更高效率,Apache相对一般;
- Nginx在反向代理场景具有明显优势,Apache相对一般。
总结:需要性能的服务器,就选Nginx;不需要性能追求稳定的,就选择Apache。
1.3nginx 应用场景
① 静态服务器 (图片、视频服务、文本)
② 动态服务
③ 反向代理, 负载均衡
④ 缓存服务
nginx 中http七层代理和四层代理
2.编译安装Nginx服务
2.1关闭防火墙,准备nginx安装包
systemctl stop firewalld //关闭防火墙 systemctl disable firewalld //设置开机关闭防火墙 setenforce 0 //关闭增强功能 # 将压缩包传入到/opt目录下 nginx-1.12.0.tar.gz
2.2安装依赖包
yum install pcre-devel zlib-devel gcc gcc-c++ make -y
2.3创建运行用户、组
useradd -M -s /sbin/nologin nginx
2.4编译安装nginx
cd /opt tar zxvf nginx-1.12.0.tar.gz
cd nginx-1.12.0/ ./configure \ //指定路径 > --prefix=/usr/local/nginx \ //指定nginx的安装路径 > --user=nginx \ //指定用户名 > --group=nginx \ //指定组名 > --with-http_stub_status_module //启用 http_stub_status_module模块以变持状态线计 make && make install ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ //让系统识别nginx的操作命令
2.5检查、启动、重启、停止 nginx服务
nginx -t //检查配置文件是否配置正确
nginx //启动nginx服务 #停止 cat /usr/local/nginx/logs/nginx.pid //先查看nginx的PID号 kill -3 <PID号> kill -s QUIT <PID号> killall -3 nginx killall -s QUIT nginx #重载 kill -1 <PID号> kill -s HUP <PID号> killall -1 nginx killall -s HUP nginx
#日志分割,重新打开日志文件
kill -USR1 <PID号>
#平滑升级
kill -USR2 <PID号>
2.6nginx版本升级
tar -zxvf nginx-1.xx.xx.tar.gz 1.22.0 cd nginx-1.xx.xx ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module \ --with-http_ssl_module make mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old //备份 cp objs/nginx /usr/local/nginx/sbin/nginx 重启服务 并且 nginx -V //查看版本 make upgrade #或者先 killall nginx ,再/usr/local/nginx/sbin/nginx
2.7添加nginx服务
2.7.1方法一
#添加脚本 vim /etc/init.d/nginx #!/bin/bash #chkconfig: 35 99 20 // 这是固定格式,2345表示运行级别,之后为开机执行顺序和关机执行顺序 #description:Nginx Service Control Script //这也是必须的 COM="/usr/local/nginx/sbin/nginx" PID="/usr/local/nginx/logs/nginx.pid" case "$1" in start) $COM ;; stop) kill -s QUIT $(cat $PID) ;; restart) $0 stop $0 start ;; reload) kill -s HUP $(cat $PID) ;; *) echo "Usage: $0 {start|stop|restart|reload}" exit 1 esac exit 0
chmod +x /etc/init.d/nginx //给执行权限 chkconfig --add nginx //添加为系统服务 systemctl stop nginx systemctl start nginx service nginx start|stop|restart|reload #系统服务 服务名称 启动模式
2.7.2方法二
#在配置文件添加服务
vim /lib/systemd/system/nginx.service [Unit] Description=nginx After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service systemctl start nginx.service systemctl enable nginx.servic
[Unit]:服务的说明 Description:描述服务 After:依赖,当依赖的服务启动之后再启动自定义的服务 [Service] 服务运行参数的设置 Type=forking 是后台运行的形式,使用此启动类型应同时指定 PIDFile 以便systemd能够跟踪服务的主进程。 ExecStart 为服务的具体运行命令 ExecReload 为重启命令 ExecStop 为停止命令 PrivateTmp=True 表示给服务分配独立的临时空间 注意:启动、重启、停止命令全部要求使用绝对路径 [Install] 服务安装的相关设置,可设置为多用户
3.Nginx服务的主配置文件 nginx.conf
nginx.conf配置文件包含内容:
全局块:全局配置,对全局生效 events块:配置影响Nginx服务器与用户的网络连接 http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置 server块:配置虚拟主机的相关参数,一个http块中可以有多个server块 location块:用于配置匹配的uri upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分
3.1全局配置
#user nobody; //运行用户,若编译时未指定则默认为 nobody worker_ processes 1; //工作进程数量,可配置成服务器内核数 * 2,如果网站访问量不大,一般设为1就够用了 #error_log logs/error.log; //错误日志文件的位置 #pid logs/nginx.pid; //PID文件的位置
3.2I/O 事件配置
events { use epoll; //使用 epoll 模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能 worker_connections 4096; //每个进程处理 4096 个连接 }
epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率
允许 Nginx 正常提供服务的连接数(并发量):
工作进程数为 1,每个进程处理 1024 个连接,则为cpu核数*连接数(1*1024=1024)
- 如提高每个进程的连接数还需执行"ulimit -n 65535"命令临时修改本地每个进程可以同时打开的最大文件数。
- 在Linux平台.上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
ulimit -a //查看系统允许当前用户进程打开的文件数限制
3.3HTTP配置
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 on; ##gzip模块设置,设置是否开启gzip压缩输出 server { listen 80; ##监听地址及端口 server_name www.clj.com; ##站点域名,可以有多个,用空格隔开 #charset utf-8; #网页的默认字符集 #access_log logs/host.access.log main; location / { ##根目录配置 root html; ##网站根目录的位置/usr/local/nginx/html 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; }
日志格式设定∶ $remote_addr与$http x forwarded for用以记录客户端的ip地址; $remote user∶ 用来记录客户端用户名称; $time local∶ 用来记录访问时间与时区;$request∶用来记录请求的url与http协议; $status∶ 用来记录请求状态;成功是200, $body bytes sent ∶ 记录发送给客户端文件主体内容大小; $http referer∶ 用来记录从哪个页面链接访问过来的; $http user agent∶记录客户浏览器的相关信息; 通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过Sremote_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(反向代理配置)
4.访问控制
4.1访问状态统计配置
--------访问状态统计配置-------- 1.先使用命令/usr/local/nginx/sbin/nginx -V 查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS 模块 cat /opt/nginx-1.12.0/auto/options | grep YES #可查看 nginx 已安装的所有模块 2.修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置 cd /usr/local/nginx/conf cp nginx.conf nginx.conf.bak vim /usr/local/nginx/conf/nginx.conf ...... http { ...... server { listen 80; server_name www.suo.com; charset utf-8; location / { root html; index index.html index.php; } ##添加 stub_status 配置## location /status { #访问位置为/status stub_status on; #打开状态统计功能 access_log off; #关闭此位置的日志记录 } } } 3.重启服务,访问测试 systemctl restart nginx 浏览器访问 http://192.168.61.100/status Active connections :表示当前的活动连接数; server accepts handled requests :表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的TCP握手次数、 已处理的请求数。 可 curl -s http://192.168.61.100/status 结合 awk与if 语句进行性能监控。
4.2基于授权的访问控制
1.生成用户密码认证文件 yum install -y httpd-tools htpasswd -c /usr/local/nginx/passwd.db zhangsan chown nginx /usr/local/nginx/passwd.db chmod 400 /usr/local/nginx/passwd.db 2.修改主配置文件相对应目录,添加认证配置项 vim /usr/local/nginx/conf/nginx.conf ...... server { location / { ...... ##添加认证配置## auth_basic "secret"; #设置密码提示框文字信息 auth_basic_user_file /usr/local/nginx/passwd.db; } } 3.重启服务,访问测试 nginx -t systemctl restart nginx 浏览器访问 http://192.168.61.100
4.3基于客户端的访问控制
访问控制规则如下: deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。 allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。 规则从上往下执行,如匹配则停止,不再往下匹配。 vim /usr/local/nginx/conf/nginx.conf ...... server { location / { ...... ##添加控制规则## allow 192.168.61.100; #允许访问的客户端 IP deny all; #拒绝其它IP客户端访问 } } systemctl restart nginx
4.4基于域名的 Nginx 虚拟主机
1.为虚拟主机提供域名解析 echo "192.168.61.100 www.suo.com www.luo.com" >> /etc/hosts 2.为虚拟主机准备网页文档 mkdir -p /var/www/html/suo mkdir -p /var/www/html/luo echo "<h1>www.suo.com</h1>" > /var/www/html/suo/index.html echo "<h1>www.luo.com</h1>" > /var/www/html/luo/index.html 3.修改Nginx的配置文件 vim /usr/local/nginx/conf/nginx.conf ...... http { ...... server { listen 80; server_name www.suo.com; #设置域名www.suo.com charset utf-8; access_log logs/www.suo.access.log; #设置日志名 location / { root /var/www/html/suo; #设置www.suo.com 的工作目录 index index.html index.php; } error_page 500 502 503 504 /50x.html; location = 50x.html{ root html; } } server { listen 80; server_name www.luo.com; #设置域名www.luo.com charset utf-8; access_log logs/www.luo.access.log; location / { root /var/www/html/luo; index index.html index.php; } error_page 500 502 503 504 /50x.html; location = 50x.html{ root html; } } } 4.重启服务,访问测试 systemctl restart nginx 浏览器访问 http://www.suo.com http://www.luo.com
4.5基于IP 的 Nginx 虚拟主机
ifconfig ens33:0 192.168.10.40 netmask 255.255.255.0 vim /usr/local/nginx/conf/nginx.conf ...... http { ...... server { listen 192.168.61.100:80; #设置监听地址192.168.61.100 server_name www.suo.com; charset utf-8; access_log logs/www.suo.access.log; location / { root /var/www/html/suo; index index.html index.php; } error_page 500 502 503 504 /50x.html; location = 50x.html{ root html; } } server { listen 192.168.61.101:80; #设置监听地址192.168.61.102 server_name www.luo.com; charset utf-8; access_log logs/www.luo.access.log; location / { root /var/www/html/luo; index index.html index.php; } error_page 500 502 503 504 /50x.html; location = 50x.html{ root html; } } } systemctl restart nginx 浏览器访问 http://192.168.61.100 http://192.168.61.101
4.6基于端口的 Nginx 虚拟主机
vim /usr/local/nginx/conf/nginx.conf ...... http { ...... server { listen 192.168.61.100:8080; #设置监听 8080 端口 server_name www.suo.com; charset utf-8; access_log logs/www.suo.access.log; location / { root /var/www/html/suo; index index.html index.php; } error_page 500 502 503 504 /50x.html; location = 50x.html{ root html; } } server { listen 192.168.61.100:8888; #设置监听 8888 端口 server_name www.luo.com; charset utf-8; access_log logs/www.luo.access.log; location / { root /var/www/html/luo; index index.html index.php; } error_page 500 502 503 504 /50x.html; location = 50x.html{ root html; } } } systemctl restart nginx 浏览器访问 http://192.168.61.100:8080 http://192.168.61.100:8888
标签:www,服务,nginx,配置,Nginx,html,usr,http,local From: https://www.cnblogs.com/suoluo212/p/16888795.html