赞
踩
环境:三台centos主机10.0.0.3为ansible-server 10.0.0.4与10.0.0.6为客户端
centos8安装ansible
[root@ansible-server ~]# vim ansible.sh #!/bin/bash cat > /etc/yum.repos.d/epel.repo < EOF [epel] name=epel baseurl=https://mirrors.aliyun.com/epel/8/Everything/x86_64/ gpgcheck=0 enabled=1 EOF yum clean all && yum makecache yum install python39 -y pip-3.9 install ansible mkdir -p /etc/ansible cat > /etc/ansible/ansible.cfg < EOF [defaults] inventory=/etc/ansible/hosts EOF cat > /etc/ansible/hosts < EOF [websrvs] 10.0.0.4 10.0.0.6 EOF [root@ansible-server ~]# chmod +x ansible.sh [root@ansible-server ~]# bash ansible.sh [root@ansible-server ~]# ssh-keygen [root@ansible-server ~]# ssh-copy-id 10.0.0.4 [root@ansible-server ~]# ssh-copy-id 10.0.0.6
编写playbook第一种基于yum安装
[root@ansible-server ~]# cat install_nginx.yml --- - hosts: websrvs remote_user: root gather_facts: no tasks: - name: create group nginx group: name=nginx state=present - name: create user nginx user: name=nginx group=nginx state=present - name: Install Nginx yum: name=nginx state=present - name: Start Nginx service: name=nginx state=started enabled=yes [root@ansible-server ~]# ansible-playbook install_nginx.yml
第二种基于编译安装
[root@ansible-server ~]# cat install_nginx.yml --- - hosts: websrvs remote_user: root gather_facts: yes vars: nginx_version: 1.22.1 #定义安装版本号 nginx_file: nginx-{{ nginx_version }}.tar.gz nginx_dir: nginx-{{ nginx_version }} user: nginx #定义用户变量 group: nginx #定义group变量 cpu: "{{ ansible_processor_vcpus }}" #获取CPU核数 install_dir: webserver tasks: - name: 安装依赖包 yum: name=gcc,make,gcc,gcc-c++,wget,pcre-devel,openssl-devel,zlib-devel - name: create group {{ group }} group: name={{ group }} - name: create user {{ user }} user: name={{ user }} group={{ group }} shell=/sbin/nologin system=yes create_home=no - name: 下载nginx并进行解压缩 unarchive: src=https://nginx.org/download/{{nginx_file}} dest=/usr/local/src owner=root group=root copy=no - name: 创建安装目录 file: path=/data/{{ install_dir }} recurse=yes state=directory - name: 进入nginx目录进行编译并安装 shell: chdir=/usr/local/src/{{ nginx_dir }} ./configure --prefix=/data/{{ install_dir }} --without-http_rewrite_module --without-http_gzip_module --user={{ user }} --group={{ group }} --pid-path=/data/{{ install_dir }}/run/nginx.pid --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module && make -j {{ cpu }} && make install - name: 授权 shell: chown -R nginx.nginx /data/{{ install_dir }} - name: 创建软连接 file: src=/data/{{ install_dir }}/sbin/nginx dest=/usr/sbin/ state=link - name: 创建server文件 shell: /usr/bin/echo -e "[Unit]\n Description=The nginx HTTP and reverse proxy server\n After=network.target remote-fs.target nss-lookup.target\n [Service]\n Type=forking\n PIDFile=/data/{{ install_dir }}/run/nginx.pid\n ExecStartPre=/usr/bin/rm -f /data/{{ install_dir }}/run/nginx.pid\n ExecStartPre=/usr/sbin/nginx -t\n ExecStart=/usr/sbin/nginx\n ExecReload=/bin/kill -s HUP $MAINPID\n KillSignal=SIGQUIT\n TimeoutStopSec=5\n KillMode=mixed\n PrivateTmp=true\n [Install]\n WantedBy=multi-user.target\n" > /usr/lib/systemd/system/nginx.service - name: 加载文件 shell: systemctl daemon-reload - name: 启动服务 service: name={{ user }} state=started enabled=yes [root@ansible-server ~]# ansible-playbook install_nginx.yml
第三种基于角色的形式进行安装
[root@ansible-server ~]# mkdir -pv /etc/ansible/roles/nginx{tasks,vars} [root@ansible-server ~]# tree /etc/ansible/roles/ roles/ └── nginx ├── tasks │ ├── chown.yml │ ├── code.yml │ ├── download.yml │ ├── group.yml │ ├── link.yml │ ├── main.yml │ ├── mkdir.yml │ ├── service_conf.yml │ ├── service.yml │ ├── user.yml │ └── yum.yml └── vars └── main.yml [root@ansible-server ~]# vim /etc/ansible/roles/nginx/tasks/yum.yml - name: 安装依赖包 yum: name=gcc,make,gcc,gcc-c++,wget,pcre-devel,openssl-devel,zlib-devel [root@ansible-server ~]# vim /etc/ansible/roles/nginx/tasks/user.yml - name: create user {{ user }} user: name={{ user }} group={{ group }} shell=/sbin/nologin system=yes create_home=no [root@ansible-server ~]# vim /etc/ansible/roles/nginx/tasks/group.yml - name: create group {{ group }} group: name={{ group }} [root@ansible-server ~]# vim /etc/ansible/roles/nginx/tasks/chown.yml - name: 授权 shell: chown -R nginx.nginx /data/{{ install_dir }} [root@ansible-server ~]# vim /etc/ansible/roles/nginx/tasks/code.yml - name: 进入nginx目录进行编译并安装 shell: chdir=/usr/local/src/{{ nginx_dir }} ./configure --prefix=/data/{{ install_dir }} --without-http_rewrite_module --without-http_gzip_module --user={{ user }} --group={{ group }} --pid-path=/data/{{ install_dir }}/run/nginx.pid --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module && make -j {{ cpu }} && make install [root@ansible-server ~]# vim /etc/ansible/roles/nginx/tasks/download.yml - name: 下载nginx并进行解压缩 unarchive: src=https://nginx.org/download/{{nginx_file}} dest=/usr/local/src owner=root group=root copy=no [root@ansible-server ~]# vim /etc/ansible/roles/nginx/tasks/link.yml - name: 创建软连接 file: src=/data/{{ install_dir }}/sbin/nginx dest=/usr/sbin/ state=link [root@ansible-server ~]# vim /etc/ansible/roles/nginx/tasks/mkdir.yml - name: 创建安装目录 file: path=/data/{{ install_dir }} recurse=yes state=directory [root@ansible-server ~]# vim /etc/ansible/roles/nginx/tasks/service_conf.yml - name: 创建server文件 shell: /usr/bin/echo -e "[Unit]\n Description=The nginx HTTP and reverse proxy server\n After=network.target remote-fs.target nss-lookup.target\n [Service]\n Type=forking\n PIDFile=/data/{{ install_dir }}/run/nginx.pid\n ExecStartPre=/usr/bin/rm -f /data/{{ install_dir }}/run/nginx.pid\n ExecStartPre=/usr/sbin/nginx -t\n ExecStart=/usr/sbin/nginx\n ExecReload=/bin/kill -s HUP $MAINPID\n KillSignal=SIGQUIT\n TimeoutStopSec=5\n KillMode=mixed\n PrivateTmp=true\n [Install]\n WantedBy=multi-user.target\n" > /usr/lib/systemd/system/nginx.service [root@ansible-server ~]# vim /etc/ansible/roles/nginx/tasks/service.yml - name: 加载文件 shell: systemctl daemon-reload - name: 启动服务 service: name={{ user }} state=started enabled=yes [root@ansible-server ~]# vim /etc/ansible/roles/nginx/tasks/main.yml - include: user.yml - include: group.yml - include: download.yml - include: mkdir.yml - include: code.yml - include: chown.yml - include: link.yml - include: service_conf.yml - include: service.yml [root@ansible-server ~]# vim /etc/ansible/roles/nginx/vars/main.yml nginx_version: 1.22.1 #定义安装版本号 nginx_file: nginx-{{ nginx_version }}.tar.gz nginx_dir: nginx-{{ nginx_version }} user: nginx #定义用户变量 group: nginx #定义group变量 cpu: "{{ ansible_processor_vcpus }}" #获取CPU核数 install_dir: webserver [root@ansible-server ~]# vim /etc/ansible/nginx.yml --- - hosts: websrvs remote_user: root gather_facts: yes roles: - nginx #执行ansible-playbook [root@ansible-server ~]# ansible-playbook /etc/ansible/nginx.yml
HTTP版本
版本 | 特性 |
---|---|
http0.9 | 原型版本,功能简陋,只有一个命令GET。服务器只能回应HTML格式字符串,不能回应别的格式。 |
http1.0 | 支持cache, MIME, method每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接引入了POST命令和HEAD命令头信息是 ASCII 码,后面数据可为任何格式。服务器回应时会告诉客户端,数据是什么格式,即Content-Type字段的作用。常见Content-Type值:text/xml image/jpeg audio/mp3 |
http1.1 | 引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。对于同一个域名,大多数浏览器允许同时建立6个持久连接引入了管道机制,即在同一个TCP连接里,客户端可以同时发送多个请求,进一步改进了HTTP协议的效率新增方法:PUT、PATCH、OPTIONS、DELETE同一个TCP连接里,所有的数据通信是按次序进行的。服务器只能顺序处理回应,前面的回应慢,会有许多请求排队,造成"队头堵塞"(Head-of-line blocking)为避免上述问题,两种方法:一是减少请求数,二是同时多开持久连接。网页优化技巧,如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等HTTP 协议不带有状态,每次请求都必须附上所有信息。请求的很多字段都是重复的,浪费带宽,影响速度。 |
HTTP原理
IO模型
零复制原理
减少CPU拷贝:在传统的IO操作中,数据通常需要从磁盘拷贝到内核缓冲区,然后再从内核缓冲区拷贝到用户空间。而零复制技术通过减少这些拷贝步骤来节省CPU资源。
减少上下文切换:上下文切换是进程从用户态切换到内核态(或反之)的过程,每次系统调用都会引发上下文切换。零复制技术通过减少系统调用的次数来减少上下文切换的次数。
实现方式:
sendfile:Nginx在Linux系统中通过sendfile系统调用来实现零复制。sendfile可以直接将内核缓冲区的数据发送到网络,而无需先拷贝到用户空间。
mmap:另一种实现方式是使用mmap技术,将文件映射到用户空间的内存地址上,然后通过网络发送这部分内存的数据。但Nginx通常更倾向于使用sendfile,因为它更简单且性能更好。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。