一、Nginx服务的基础
- Nginx介绍:
Nginx是一款由俄罗斯开发的开源的高性能的web服务器和反向代理服务器,同时支持IMAP/POP3/SMTP代理服务,性能优势尤为显著,官方声称,Nginx服务器开源处理最高50000的并发请求
- 特点:
(1)稳定性高
(2)系统资源消耗低
(3)高性能,能够处理大并发
(4)主要用于静态的解析,动静页面的分离
——单台物理服务器可支持30000~50000个并发请求
- 优势:
- 作为web服务器,Nginx处理静态文件、索引文件以及自动索引效率非常高
- 作为代理服务器,Nginx可以实现无换成的反向代理加速,提高网站的运行速度
- 作为负载均衡服务器,Nginx既可以在内部直接支持Rails和PHP,也可以支持HTTP代理服务器,对外进行服务,同时支持简单的容错和利用算法进行负载均衡
- 性能方面,Nginx在实现上非常注重效率,采用内核Poll模型,可以支持更多的并发连接,最多可以支持50000的并发连接数,而且占用很少的内存资源
- 稳定性方面,Nginx采用了分阶段资源分配技术,使得对CPU与内存的占用率非常低,并且官方称Nginx保持的10000个没有活动的连接,这些连接只占用2.5M内存,由此得出,类似于DOS这样的攻击几乎是无效的
- 高可用方面,Nginx支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软件版本或配置进行升级,即使运行数月也无需重新启动,几乎是做到了7*24小时的不间断运行
二、Nginx的安装及运行控制
******(1)挂载镜像、修改主机名、编写本地yum源等 [root@centos7-007 ~]# mount /dev/cdrom /media/cdrom/ mount: /dev/sr0 写保护,将以只读方式挂载 [root@centos7-007 ~]# hostname Nginx [root@centos7-007 ~]# echo "Nginx" > /etc/hostname [root@centos7-007 ~]# bash [root@Nginx ~]# cat /etc/yum.repos.d/centos.repo [aaa] name=这是一个本地YUM baseurl=file:///media/cdrom enabled=1 gpgcheck=0 ******(2)安装Nginx必要组件 [root@Nginx ~]# yum -y install pcre-devel zlib-devel 。。。。。。 完毕! ******(3)创建运行账户和组 —————————————————————————————————华丽分割线———————————————————————————————————————————— Nginx程序默认以nobody的身份运行,创建专门的用户来实现准确控制其访问权限,增加灵活性,降低安全风险 —————————————————————————————————————————————————————————————————————————————————————— [root@Nginx ~]# useradd -M -s /sbin/nologin nginx ******(4)上传源码包,进行配置、编译、安装Nginx [root@Nginx ~]# ll 总用量 964 -rw-------. 1 root root 1220 9月 3 18:16 anaconda-ks.cfg -rw-r--r-- 1 root root 980831 1月 12 20:05 nginx-1.12.0.tar.gz [root@Nginx ~]# tar zxvf nginx-1.12.0.tar.gz [root@Nginx ~]# cd nginx-1.12.0 [root@Nginx nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install (--with-http_stub_status_module 支持状态统计,便于查看服务器的连接信息) ******(5)安装后的优化调整,方便Nginx运行 创建软连接,管理员可以直接执行nginx命令去调用nginx主程序 [root@Nginx nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ ******(6)运行控制 [root@Nginx nginx-1.12.0]# nginx -t (检查配置文件是否完好) nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok (ok就代表文件完好) nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@Nginx nginx-1.12.0]# nginx (启动nginx服务) [root@Nginx nginx-1.12.0]# netstat -anpt | grep nginx (检查监听端口,发现已经开启) tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3749/nginx: master ******(7)访问nginx 开启一台win7,访问服务器地址,发现可以成功进行访问
——————————————————————————————————————注意—————————————————————————————————————————— nginx支持标准的进程信号,HUP信号表示重载配置,QUIT信号表示退出进程,KILL信号表示杀死进程,可以使用killall命令进行重载配置或停止该服务的操作 1.如果没有安装killall命令,使用该命令安装 yum -y install psmisc 2.重载配置 killall -s HUP nginx = killall -1 nginx 3.停止服务 killall -s QUIT nginx = killall -3 nginx 4.杀死进程 killall -s KILL nginx ——————————————————————————————————————————————————————————————————————————————————— ******(7)为了方便使用,使用chkconfig和systemctl工具进行管理,可以写一个nginx的服务脚本来进行运行控制 [root@Nginx nginx-1.12.0]# vim /etc/init.d/nginx (就是利用kill去杀死进程pid号来实现的) #!/bin/bash # chkconfig: - 99 20 # description: Nginx Service Control Script PROG=/usr/local/nginx/sbin/nginx PIDF=/usr/local/nginx/logs/nginx.pid case "$1" in start) $PROG ;; stop) kill -s QUIT $(cat $PIDF) ;; restart) $0 stop $0 start ;; reload) kill -s HUP $(cat $PIDF) ;; *) echo "Usage: $0 {start|stop|restart|reload}" exit 1 esac exit 0 保存退出 ******(8)赋予可执行权限、添加为系统服务 [root@Nginx nginx-1.12.0]# chmod +x /etc/init.d/nginx [root@Nginx nginx-1.12.0]# chkconfig --add nginx ******(9)使用systemctl命令进行管理nginx [root@Nginx nginx-1.12.0]# systemctl status nginx (查看状态) ● nginx.service - (null) Loaded: loaded (/etc/rc.d/init.d/nginx; bad; vendor preset: disabled) Active: inactive (dead) (发现是关闭状态) Docs: man:systemd-sysv-generator(8) [root@Nginx nginx-1.12.0]# systemctl start nginx (开启nginx服务) [root@Nginx nginx-1.12.0]# systemctl status nginx (再次查看nginx服务状态) ● nginx.service - SYSV: Nginx Service Control Script Loaded: loaded (/etc/rc.d/init.d/nginx; bad; vendor preset: disabled) Active: active (running) since 二 2021-01-12 22:04:25 CST; 5min ago (变成了开启状态) Docs: man:systemd-sysv-generator(8) Process: 3878 ExecStop=/etc/rc.d/init.d/nginx stop (code=exited, status=0/SUCCESS) Process: 3880 ExecStart=/etc/rc.d/init.d/nginx start (code=exited, status=0/SUCCESS) CGroup: /system.slice/nginx.service ├─3882 nginx: master process /usr/local/nginx/sbin... └─3883 nginx: worker process 1月 12 22:04:25 Nginx systemd[1]: Stopped SYSV: Nginx Servic... 1月 12 22:04:25 Nginx systemd[1]: Starting SYSV: Nginx Servi... 1月 12 22:04:25 Nginx systemd[1]: Started SYSV: Nginx Servic... Hint: Some lines were ellipsized, use -l to show in full.
三、Nginx的主配置文件——nginx.conf
配置文件位置:/usr/local/nginx/conf/nginx.conf 主配置文件分为三个部分:全局配置、I/O事件配置、HTTP配置 (1)全局配置: 包括运行用户、工作进程数、错误日志、PID文件存放位置等 选项:worker_processes 1; (设置工作进程数量,可以参考CPU核心总数指定工作进程数,网站访问量越大,进程数设置越多) (2)I/O事件配置: 指定Nginx进程的I/O响应模型,每个进程连接数等 选项: events { use epoll; (使用epoll模型,提高性能) worker_connections 4096; (每个进程处理4096个连接) } !!!!注意:如果工作进程数是8个,每个进程处理4096个连接,则Nginx提供服务的连接数是(4096*8),具体看服务器硬件和网络带宽等物理条件性能等 (3)HTTP配置: 设置访问日志、http端口、网页目录、默认字符集、连接保持、虚拟主机等信息
四、nginx服务的状态统计
启动状态统计模块,来反馈Web服务器的访问情况,也就是访问量监控 ******(1)修改主配置文件 [root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf 。。。。。。 51 error_page 500 502 503 504 /50x.html; 52 location = /50x.html { 53 root html; 54 } 55 location /status { (写入) 56 stub_status on; (写入) 57 access_log off; (写入) 58 } (写入) 59 # proxy the PHP scripts to Apache listening on 127.0 .0.1:80 。。。。。。 保存退出 [root@Nginx nginx-1.12.0]# 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 [root@Nginx nginx-1.12.0]# systemctl restart nginx (重启服务) [root@Nginx nginx-1.12.0]# netstat -antp | grep nginx (查看端口) tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3882/nginx: master [root@Nginx ~]# systemctl restart nginx (重启服务) ******(2)访问http://192.168.100.7/status (查看统计信息) 显示: Active connections:1 (活跃连接数) server accepts handled requests (已经处理的连接信息) 1(已经处理的连接数) 1(成功的TCP握手次数) 1(已经处理的请求数) Reading: 0 Writing: 1 Waiting: 0
五、部署Nginx虚拟主机
在上一个实验的基础上完成
******(1)部署nginx虚拟主机,配置不同虚拟主机的页面 [root@Nginx ~]# cd /usr/local/nginx/html/ [root@Nginx html]# ls 50x.html index.html [root@Nginx html]# mkdir aaa [root@Nginx html]# mkdir bbb [root@Nginx html]# echo "aaaaaaa" > aaa/index.html [root@Nginx html]# echo "bbbbbbb" > bbb/index.html ******(2)修改主配置文件 [root@Nginx html]# vim /usr/local/nginx/conf/nginx.conf (编写主配置文件) 。。。。。。 (添加、修改) 34 server { 35 listen 80; 36 server_name www.aaa.com; 37 charset utf-8; 38 access_log logs/aaa.access.log; 39 location / { 40 root /usr/local/nginx/html/aaa; 41 index index.html index.php; 42 } 43 } 44 server { 45 listen 80; 46 server_name www.bbb.com; 47 charset utf-8; 48 access_log logs/bbb.access.log; 49 location / { 50 root /usr/local/nginx/html/bbb; 51 index index.html index.php; 52 } 。。。。。。 保存退出 [root@Nginx 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 [root@Nginx html]# systemctl restart nginx (重启服务) [root@Nginx html]# netstat -anpt | grep nginx (查看监听端口) tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 18715/nginx: master ******(3)给win7配置hosts文件,访问不同的域名,验证nginx服务的虚拟主机
进入到C:/Windows/System32/drivers/etc目录中,找到hosts文件,进行修改
保存关闭,使用浏览器访问两个域名
至此,nginx虚拟主机完成!!!!