目录
一、Nginx概述
二、Nginx 和 Apache 的区别
三、Nginx的应用场景
四、编译安装Nginx
五、Nginx服务的主配置文件 - nginx.conf
1.全局配置
2.I/O事件配置
3.HTTP配置
六、Nginx设置最大并发
七.Nginx访问状态统计
八、访问控制
1.基于授权的访问控制
2.基于客户端的访问控制
九、Nginx虚拟主机
1.基于域名的Nginx虚拟主机
2.基于IP的Nginx虚拟主机
3.基于端口的Nginx虚拟主机
一、Nginx概述
Nginx是一款高性能、轻量级Web服务软件。具有稳固性高、系统资源斲丧低、对HTTP并发毗连的处理本领高(单台物理服务器可支持30000~50000个并发哀求)的特点。
二、Nginx 和 Apache 的区别
最焦点的区别在于nginx采用的是异步非壅闭机制,一个进程可以同时处理多个毗连;apache采用的是同步壅闭+多进程/多线程模型,一个进程只能同时处理一个毗连。
相对来说:
- nginx抗并发本领更高(处理2-3万并发毗连数,最高能支持5万并发)
- nginx更轻量,CPU、内存资源斲丧更少
- nginx配置简介,使用场景多,性能稳固
三、Nginx的应用场景
用作Web网站服务,处理静态网页哀求。
用作虚拟机,实现在一个服务器上部署多个网站站点。
用作反向署理、负载均衡,可作为网关署理服务器接收客户端的哀求再转发给后端上游服务器处理。
用作Web缓存服务器,缓存经常被访问的静态网页资源。
四、编译安装Nginx
1.安装依赖包
Nginx的配置运行需要pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件
- yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
复制代码 2.创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,发起为其创建专门的用户账号,以便更准确地控制其访问权限)
- useradd -M -s /sbin/nologin nginx
复制代码 3.编译安装Nginx
- d 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的操作命令
复制代码 4.检查、启动、重启、停止 nginx 服务命令
- nginx -t #检查配置文件是否配置正确
- /usr/local/nginx/sbin/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号> #平滑升级
复制代码 新版本升级的方法:
- tar -zxvf nginx-1.xx.xx.tar.gz
- 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
- make upgrade
- #要保证当前 nginx 进程是通过 /usr/local/nginx/sbin/nginx 启动的,而不是通过查找环境变量中那个 nginx 命令启动的
- #或者先 killall nginx ,再/usr/local/nginx/sbin/nginx
复制代码 5.添加Nginx系统服务
- 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
- ---------------------------------------------------------
- [Unit]:服务的说明
- Description:描述服务
- After:依赖,当依赖的服务启动之后再启动自定义的服务
- [Service]服务运行参数的设置
- Type=forking是后台运行的形式,使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程。
- ExecStart为服务的具体运行命令
- ExecReload为重启命令
- ExecStop为停止命令
- PrivateTmp=True表示给服务分配独立的临时空间
- 注意:启动、重启、停止命令全部要求使用绝对路径
- [Install]服务安装的相关设置,可设置为多用户
- ---------------------------------------------------------
- chmod 754 /lib/systemd/system/nginx.service
- systemctl start nginx.service
- systemctl enable nginx.service
复制代码 五、Nginx服务的主配置文件 - nginx.conf
- 全局块:全局配置,对全局见效;
- events块:配置影响 Nginx 服务器与用户的网络毗连;
- http块:配置署理,缓存,日志定义等绝大多数功能和第三方模块的配置;
- server块:配置虚拟主机的相干参数,一个 http 块中可以有多个 server 块;
- location块:用于配置匹配的 uri ;
- upstream:配置后端服务用具体地址,负载均衡配置不可或缺的部分。
1.全局配置
- user nobody; #运行用户,若编译时未指定则默认为 nobody
- worker_processes 1; #工作进程数量,一般设置为和 CPU 核数一样;设置为auto,nginx将会自己获取这个数值
- #error_log logs/error.log; #错误日志文件的位置
- #pid logs/nginx.pid; #PID 文件的位置
- worker_rlimit_nofile 65535; #指定 worker 子进程可以打开的最大文件句柄数,默认为1024
复制代码 2.I/O事件配置
- events {
- use epoll; #使用 epoll I/O模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
- worker_connections 65535; #每个 worker 子进程能够处理的最大并发连接数
- multi_accept on; #告诉nginx收到一个新连接通知后接受尽可能多的连接,默认为off,关闭时一次接收一条连接
- accept_mutex on; #默认为on,开启时表示以串行方式接入新连接,否则将通报给所有worker。这可能会浪费资源并产生不可预计的后果,例如惊群问题
复制代码 3.HTTP配置
- 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;
- ##开启高效的文件传输模式(启用内核复制模式,大幅提高IO效率)
- sendfile on;
- ##开启tcp_nopush和tcp_nodelay用于防止网络阻塞
- #必须在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量(将响应头和正文的开始部分一起发送,而不一个接一个的发送。)
- tcp_nopush on;
- tcp_nodelay on;
- ##连接保持超时时间,单位是秒
- #keepalive_timeout 0;
- keepalive_timeout 65;
- ##gzip模块设置,设置是否开启gzip压缩输出
- #gzip on;
-
- ##Web 服务的监听配置
- server {
- ##监听地址及端口
- listen 80;
- ##站点域名,可以有多个,用空格隔开
- server_name www.xy101.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;
- }
- }
- }
复制代码 六、Nginx设置最大并发
进入nginx.conf中编辑:
- vim /usr/local/nginx/conf/nginx.conf
- ......
- worker_processes 1 #设置工作进程数量,一般与CPU数量相同或设置为auto
- worker_connections 1024 #设置每个worker进程能够处理的连接数
- worker_rlimit_nofile 65535 #设置每个worker进程最大可以打开的文件数
复制代码 使用ulimit命令:
- ulimit -SHn 65535 #指定进程能够打开的文件数
复制代码 在/etc/security/limits.conf中编辑:
- vim /etc/security/limits.conf
- ......
- * soft nofile 65535
- * hard nofile 65535
复制代码 七.Nginx访问状态统计
1.安装nginx时添加状态统计模块
- ./configure --with-http_stub_status_module
复制代码 2.修改 nginx.conf 配置文件,开启状态统计功能
- 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.xy101.com;
- charset utf-8;
- location / {
- root html;
- index index.html index.php;
- }
- ##添加 stub_status 配置##
- location /status { #访问位置为/status
- stub_status on; #打开状态统计功能
- access_log off; #关闭此位置的日志记录
- }
- }
- }
复制代码 3.重启服务,访问测试
欣赏器访问 http://192.168.80.10/status
Active connections:表现当前的运动毗连数,即当前与 Nginx 服务器创建的毗连数。
server accepts handled requests :表现已经处理的毗连信息
三个数字依次表现服务器已接收的毗连数;服务器乐成处理的毗连数;服务器累计处理的总哀求数(在保持毗连模式下,哀求数目可能会大于毗连数目)
Reading:表现当前正在从客户端读取数据的毗连数。
Writing:表现当前正在向客户端写入数据的毗连数。
Waiting:表现当前空闲并等待哀求的毗连数。
可 curl -Ls http://192.168.80.10/status 结合 awk与if 语句进行性能监控。
八、访问控制
1.基于授权的访问控制
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.80.10
2.基于客户端的访问控制
访问控制规则如下:
- deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。
- allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。
规则从上往下实行,如匹配则停止,不再往下匹配。
- vim /usr/local/nginx/conf/nginx.conf
- ......
- server {
- location / {
- ......
- ##添加控制规则##
- allow 192.168.80.200; #允许访问的客户端 IP
- deny all; #拒绝其它IP客户端访问
- }
- }
- systemctl restart nginx
复制代码 九、Nginx虚拟主机
1.基于域名的Nginx虚拟主机
1.为虚拟主机提供域名解析
- echo "192.168.80.10 www.xy101.com www.xy102.com" >> /etc/hosts
复制代码 2.为虚拟主机准备网页文档
- mkdir -p /var/www/html/xy102
- mkdir -p /var/www/html/xy101
- echo "<h1>www.bi01.com</h1>" > /var/www/html/bi01/index.html
- echo "<h1>www.bi02.com</h1>" > /var/www/html/bi02/index.html
复制代码 3.修改Nginx配置文件
- vim /usr/local/nginx/conf/nginx.conf
- ......
- http {
- ......
- server {
- listen 80;
- server_name www.bi01.com; #设置域名www.bi01.com
- charset utf-8;
- access_log logs/www.bi01.access.log; #设置日志名
- location / {
- root /var/www/html/bi01; #设置www.xy101.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.bi02.com; #设置域名www.bi02.com
- charset utf-8;
- access_log logs/www.bi02.access.log;
- location / {
- root /var/www/html/bi02;
- index index.html index.php;
- }
- error_page 500 502 503 504 /50x.html;
- location = 50x.html{
- root html;
- }
- }
- }
复制代码 4.重启服务,访问测试
2.基于IP的Nginx虚拟主机
1.需多张网卡,且网段不能相同
2.为虚拟主机准备网页文档
3.修改Nginx配置文件
- vim /usr/local/nginx/conf/nginx.conf
- ......
- http {
- ......
- server {
- listen 192.168.80.10:80; #设置监听地址192.168.80.10
- server_name www.bi01.com;
- charset utf-8;
- access_log logs/www.bi01.access.log;
- location / {
- root /var/www/html/bi01;
- index index.html index.php;
- }
- error_page 500 502 503 504 /50x.html;
- location = 50x.html{
- root html;
- }
- }
-
- server {
- listen 192.168.90.11:80; #设置监听地址192.168.80.11
- server_name www.bi02.com;
- charset utf-8;
- access_log logs/www.bi02.access.log;
- location / {
- root /var/www/html/bi02;
- index index.html index.php;
- }
- error_page 500 502 503 504 /50x.html;
- location = 50x.html{
- root html;
- }
- }
- }
复制代码 4.重启服务,访问测试
3.基于端口的Nginx虚拟主机
1.为虚拟主机准备网页文档
2.修改Nginx配置文件
- vim /usr/local/nginx/conf/nginx.conf
- ......
- http {
- ......
- server {
- listen 192.168.80.10:8080; #设置监听 8080 端口
- server_name www.bi01.com;
- charset utf-8;
- access_log logs/www.bi01.access.log;
- location / {
- root /var/www/html/bi01;
- index index.html index.php;
- }
- error_page 500 502 503 504 /50x.html;
- location = 50x.html{
- root html;
- }
- }
-
- server {
- listen 192.168.80.10:8888; #设置监听 8888 端口
- server_name www.bi02.com;
- charset utf-8;
- access_log logs/www.bi02.access.log;
- location / {
- root /var/www/html/bi02;
- index index.html index.php;
- }
- error_page 500 502 503 504 /50x.html;
- location = 50x.html{
- root html;
- }
- }
- }
复制代码 3.重启服务,访问测试
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |