linux怎么查看本机内存大小
268
2022-11-03
详解 nginx 配置文件及构建 web 虚拟主机
一 Nginx简介Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器。Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。其将源代码以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011 年 6 月 1 日,Nginx 1.0.4 发布。Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,单台物理服务器可支持30 000~50 000个并发请求。并在一个 BSD-like 协议下发行。由俄罗斯的程序设计师 Igor Sysoev 所开发,供俄国大型的入口网站及搜索引擎 Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 Nginx 网站用户有:百度 BWS、新浪、网易、腾讯、等。Tengine:Tengine 是由淘宝网发起的 Web 服务器项目。它在 Nginx 的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine 的性能和稳定性已经在大型的网站如淘宝网、天猫商城等得到了很好的检验。(可以这样理解:淘宝网拿到了 Nginx 源代码之后,进行了功能的填充、优化等等,然后提交给Nginx 官方,但是由于 Nginx 官方相应慢甚至不响应,加上语言沟通的不顺畅,于是淘宝公司就自己打包,在遵循 GPL 的原则上进行二次开发,于是就出了现在的 Tengine 这个版本)二、Nginx和Apache的差异Nginx是一个基于事件的Web服务器,Apache是一个基于流程的服务器;Nginx所有请求都由一个线程处理,Apache单个线程处理单个请求;Nginx避免子进程的概念,Apache是基于子进程的;Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般;Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件;Nginx支持热部署,Apache不支持热部署;Nginx对于静态文件处理具有更高效率,Apache相对一般;Nginx在反向代理场景具有明显优势,Apache相对一般。三、编译安装Nginx服务1.关闭防火墙,将安装nginx所需软件包传到/opt目录下systemctl stop firewalldsystemctl disable firewalldsetenforce 0nginx-1.12.2.tar.gz2.安装依赖包#nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。yum -y install pcre-devel zlib-devel gcc gcc-c++ make3.创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)useradd -M -s /sbin/nologin nginx4.编译安装Nginxcd /opttar zxvf nginx-1.12.2.tar.gz -C /opt/cd nginx-1.12.2/./configure \--prefix=/usr/local/nginx \ #指定nginx的安装路径--user=nginx \ #指定用户名--group=nginx \ #指定组名--with- #启用 模块以支持状态统计操作cd nginx-1.12.2/./configure \--prefix=/usr/local/nginx \--user=nginx \--group=nginx \--with-&& make installln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作命令5.检查、启动、重启、停止 nginx服务nginx -t #检查配置文件是否配置正确#启动nginx #停止cat /usr/local/nginx/logs/nginx.pid #先查看nginx的PID号kill -3 kill -s QUIT killall -3 nginxkillall -s QUIT nginx#重载kill -1 kill -s HUP killall -1 nginxkillall -s HUP nginx#日志分割,重新打开日志文件kill -USR1 #平滑升级kill -USR2 | 信号编号 | 信号名 | 含义 | 0 | EXIT | 程序退出时收到该信息。 | 1 | HUP | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。| 2 | INT | 表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。 |3 | QUIT |退出。 | 9 | KILL | 杀死进程,即强制结束进程。 | 11 | SEGV | 段错误。 | 15 | TERM | 正常结束进程,是 kill 命令的默认信号 新版本升级:tar -zxvf nginx-1.xx.xx.tar.gz cd nginx-1.xx.xx./configure \--prefix=/usr/local/nginx \ --user=nginx \ --with-\--with-/usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_oldcp objs/nginx /usr/local/nginx/sbin/nginxmake upgrade#或者先 killall nginx ,再/usr/local/nginx/sbin/nginx6.添加 Nginx 系统服务方法一:vim /etc/init.d/nginx#!/bin/bash#chkconfig: - 99 20 // 这是固定格式,2345表示运行级别,之后为开机执行顺序和关机执行顺序#description:Nginx Service Control Script //这也是必须的 COM="/usr/local/nginx/sbin/nginx" PID="/usr/local/nginx/logs/nginx.pid"case "$ 1" instart) $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 1esacexit 0chmod +x /etc/init.d/nginxchkconfig --add nginx #添加为系统服务service nginx stop方法二:vim /lib/systemd/system/nginx.service[Unit]Description=nginxAfter=network.target[Service]Type=forkingPIDFile=/usr/local/nginx/logs/nginx.pidExecStart=/usr/local/nginx/sbin/nginxExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=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.servicesystemctl start nginx.servicesystemctl enable nginx.service四、认识Nginx服务的主配置文件 nginx.confvim /usr/local/nginx/conf/nginx.conf 1.全局配置#user nobody; #运行用户,若编译时未指定则默认为 nobodyworker_processes 1; #工作进程数量,可配置成服务器内核数 * 2,如果网站访问量不大,一般设为1就够用了#error_log logs/error.log; #错误日志文件的位置#pid logs/nginx.pid; #PID 文件的位置2.I/O 事件配置events {use epoll; #使用 epoll 模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能worker_connections 4096; #每个进程处理 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),当然具体还要看服务器硬件、网络带宽等物理条件的性能表现。五、HTTP 配置使用“{ }”界定标记,包括访问日志、HTTP 端口、网页目录、默认字符集、连接保持,以及后面要讲到的虚拟 Web 主机、PHP 解析等一系列设置,其中大部分配置语句都包含在子界定标记“server { }”内{ ##文件扩展名与文件类型映射表 include mime.types; ##默认文件类型 default_type application/octet-stream; ##日志格式设定 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$' # '"$"$ #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 kgc.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; } }}
日志格式设定:$remote_addr与$用来记录访问时间与时区;$request: 用来记录请求的url与用来记录请求状态;成功是200,$body_bytes_sent :记录发送给客户端文件主体内容大小;$/var//var/-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/confcp nginx.conf nginx.conf.bakvim /usr/local/nginx/conf/nginx.conf......{...... server { listen 80; server_name kgc.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浏览器访问 connections :表示当前的活动连接数;server accepts handled requests :表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的TCP握手次数、 已处理的请求数。可 curl -s 结合 awk与if 语句进行性能监控。六、基于授权的访问控制1.生成用户密码认证文件yum install -y -c /usr/local/nginx/passwd.db zhangsanchown nginx /usr/local/nginx/passwd.dbchmod 400 /usr/local/nginx/passwd.db2.修改主配置文件相对应目录,添加认证配置项vim /usr/local/nginx/conf/nginx.conf...... server { location / { ...... ##添加认证配置## auth_basic "secret"; #设置密码提示框文字信息 auth_basic_user_file /usr/local/nginx/passwd.db; } }3.重启服务,访问测试nginx -tsystemctl restart nginx浏览器访问 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.为虚拟主机提供域名解析echo "192.168.80.10 kgc.com benet.com" >> /etc/hosts2.为虚拟主机准备网页文档mkdir -p /var/-p /var/"
kgc.com" > /var/"benet.com" > /var//usr/local/nginx/conf/nginx.conf
......
{
......
server {
listen 80;
server_name kgc.com; #设置域名kgc.com
charset utf-8;
access_log logs/kgc.access.log; #设置日志名
location / {
root /var/的工作目录
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
server {
listen 80;
server_name benet.com; #设置域名benet.com
charset utf-8;
access_log logs/benet.access.log;
location / {
root /var/index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}
4.重启服务,访问测试
systemctl restart nginx
浏览器访问
的 Nginx 虚拟主机--------
ifconfig ens33:0 192.168.80.11 netmask 255.255.255.0
vim /usr/local/nginx/conf/nginx.conf
......
{
......
server {
listen 192.168.80.10:80; #设置监听地址192.168.80.10
server_name kgc.com;
charset utf-8;
access_log logs/kgc.access.log;
location / {
root /var/index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
server {
listen 192.168.80.11:80; #设置监听地址192.168.80.11
server_name benet.com;
charset utf-8;
access_log logs/benet.access.log;
location / {
root /var/index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}
systemctl restart nginx
浏览器访问
Nginx 虚拟主机
vim /usr/local/nginx/conf/nginx.conf
......
{
......
server {
listen 192.168.80.10:8080; #设置监听 8080 端口
server_name kgc.com;
charset utf-8;
access_log logs/kgc.access.log;
location / {
root /var/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 benet.com;
charset utf-8;
access_log logs/benet.access.log;
location / {
root /var/index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}
systemctl restart nginx
浏览器访问
http://192.168.80.11:8080
http://192.168.80.11:8888
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~