设为首页 收藏本站
查看: 1928|回复: 0

[经验分享] nginx-Ashuang

[复制链接]

尚未签到

发表于 2018-11-12 08:00:57 | 显示全部楼层 |阅读模式
nginx是一款轻量级的web服务器、也是一个高性能的HTTP和反向代理服务器及电子邮件(IMAP/POP3/SMTP)代理服务器,由俄罗斯lgor Sysoev所开发。
  实验环境:rhel6 selinux and iptables disabled
  实验主机: 172.25.38.1 nginx(主机1)
1.nginx 安装
  yum install -y pcre-devel openssl-devel ##解决依赖性
  tar zxvf nginx-1.0.2.tar.gz ##下载解压压缩包
  cd nginx-1.0.2
  vim auto/cc/gcc
  #CFLAGS=”$CFLAGS -g”
  ##(注释掉这行,去掉 debug 模式编译,编译以后程序只有几百 k)
  vim src/core/nginx.h
  #define NGINX_VERSION "1.0.2”
  #define NGINX_VER "nginx"
  ##(修改此行,去掉后面的“NGINX_VERSION”,为了安全,这样编译后外界无法获取程序的版本号)
  [root@westos1 nginx-1.10.1]# du -sh ##目前目录大小
  8.7M .
  [root@westos1 nginx-1.10.1]#./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module
##编译,后跟路径和参数编译完成后会出现Makefile 和 objs

  [root@westos1 nginx-1.10.1]# make && make install               ##在有Makefile的目录下执行(##编译三部曲./configure && make && make install)
  [root@westos1 nginx-1.10.1]# cd /usr/local/lnmp/nginx/sbin/
  [root@westos1 sbin]# ls
  nginx
  [root@westos1 sbin]# ./nginx                                                        ##编译
  [root@westos1 sbin]# netstat -antlp | grep nginx                     ##查看监听端口
  tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3810/nginx
  [root@westos1 sbin]# cd ..
  [root@westos1 nginx]# du –sh                                                     ##编译后目录大小
  932K .
  [root@westos1 nginx-1.10.1]# echo $PATH                              ##查看环境变量 #将命令链接或移动到环境变量下,命令才能不加路径直接执行
  /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  [root@westos1 ~]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/
  ##建立软连接,直接将nginx作为系统指令,或在/etc/profile 输入指令 export PATH=$PATH:/usr/local/lnmp/nginx/sbin,保存退出后,刷新source /etc/profile
  [root@westos1 ~]# which nginx
  /usr/local/sbin/nginx
  [root@westos1 ~]# nginx -s stop                                                       ##关闭 nginx
  [root@westos1 ~]# nginx                                                                     ##运行 nginx

  [root@westos1 ~]# nginx -s>  [root@westos1 ~]# nginx –t                                                                ##检测语法
  [root@westos1 ~]# useradd -u 900 -s /sbin/nologin nginx          ##建立用户nginx
  删除编译步骤:
  rm -fr /usr/local/lump/nginx
  cd nginx.1.10.1
  make clean
  cd ..
  rm -fr nginx.1.10.1              ##删除源码
2.配置nginx多核cpu
DSC0000.jpg                     ##查看cpu

  以下操作可以优化nginx,使它运行更高效
  说明:
  nginx默认没有开启利用多核CPU,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU。CPU是任务处理,计算最关键的资源,CPU核越多,性能就越好。
  配置nginx多核CPU,worker_cpu_affinity使用方法:
  A、2核cpu,开启2个进程
  worker_process 2;
  worker_cpu_affinity 01 10;
  ##01 表示启用第一个cpu内核,10 表示启用第二个cpu内核。
  worker_cpu_affinity 01 10;表示启用两个进程。第一个进程对应第一个CPU内核,第二个进程对应第二个CPU内核
  B、2核cpu,开启4个进程
  worker_process 4;
  worker_cpu_affinity 01 10 01 10;
  ##开启了4个进程,他们分别对应着开启2个CPU 内核
  C、4核cpu,开启4个进程
  worker_process 4;
  worker_cpu_affinity 0001 0010 0100 1000;
  ##0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,以此类推。
  D、4核cpu,开启2个进程
  worker_process 2;
  worker_cpu_affinity 0101 1010;
  0101 表示开启第一个和第三个内核,1010 表示开启第二个和第四个内核。两个进程对应四个内核
  E、8核CPU,开启8个进程
  worker_process 8;
  worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
  0001 表示启用第一个CPU内核,0010 表示启用第二个CPU内核,以此类推。
  2核
  4核
  8核
  01
  0001
  0000 0001
  有多少核就有几位数,1 表示该内核开启,0 表示关闭
  worker_process最多开启8个,8个以上性能不会再提升了,而且稳定性变得更低,所以8个进程够用了。
  配置完成后,重启nginx。
  worker_cpu_affinity是写在编译后的目录的/nginx/nginx.conf(主配置文件)里面的。
  vim /usr/local/lnmp/nginx/conf/nginx.conf
DSC0001.jpg

  user nginx;                                                    ##用户nginx
  worker_processes 2;                                   ##工作进程数
  worker_cpu_affinity 01 10;
  #error_log logs/error.log;
  #error_log logs/error.log notice;
  #error_log logs/error.log info;               ##错误日志存放路径
  #pid logs/nginx.pid;
  events {
  use epoll;                                                    ##使用epoll高效模式
  worker_connections 4096;                     ##工作进程的最大连接数量,尽量大
  }
DSC0002.jpg         ##检测语法并重载主配置文件

  [root@westos1 conf]# ps -axu
DSC0003.jpg         ##修改前

DSC0004.jpg         ##修改后

DSC0005.jpg

  ##虚拟机死机,重启即可
  附加:用户limit
  vim /etc/security/limits.conf
DSC0006.jpg

  [wxh@westos1 root]$ ulimit –a             ##查看当前用户进程限制

  core file>
  data seg>  scheduling priority (-e) 0

  file>  pending signals (-i) 7812
  max locked memory (kbytes, -l) 64

  max memory>  open files (-n) 1024

  pipe>  POSIX message queues (bytes, -q) 819200
  real-time priority (-r) 0

  stack>  cpu time (seconds, -t) unlimited
  max user processes (-u) 100
  virtual memory (kbytes, -v) unlimited
  file locks (-x) unlimited
3.http
  #keepalive_timeout 0;
  keepalive_timeout 65;                 ##keepalive超时时间
  #gzip on;
  server {
  listen 80;                                        ##监听端口
  server_name localhost;              ##配置访问域名
  #charset koi8-r;
  #access_log logs/host.access.log main;
  location / {
  root html;
  index index.html index.htm;
  }
  location /status {
  stub_status on;
  access_log off;                             ##设定查看nginx状态的地址
  }
  #error_page 404 /404.html;
  浏览器测试:
DSC0007.png

DSC0008.jpg

4.ssl 证书
  vim /usr/local/lnmp/nginx/conf/nginx.conf
DSC0009.jpg

  cd /etc/pki/tls/certs
  make cert.pem                            ##生成自签证书
DSC00010.jpg DSC00011.jpg

  mv cert.pem /usr/local/lnmp/nginx/conf/                               ##将生成的证书移动到编译后的目录
  nginx -t

  nginx -s>  [root@westos1 certs]# netstat -antlpe | grep nginx
  tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 0 10519 1522/nginx
  tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 0 10807 1522/nginx
  网页测试:
DSC00012.jpg DSC00013.jpg

DSC00014.jpg

  或者
DSC00015.jpg

DSC00016.jpg DSC00017.jpg DSC00018.jpg

  重写网页1:
  vim /usr/local/lnmp/nginx/conf/nginx.conf
  server {
  listen 80;
  server_name westos1.example.com;
  vim /usr/local/lnmp/nginx/html/index.html
DSC00019.jpg

  nginx -t

  nginx -s>  网页测试
DSC00020.png

DSC00021.png

DSC00022.jpg

  注意网页名变化
  重写网页2:
  vim /usr/local/lnmp/nginx/conf/nginx.conf
DSC00023.jpg

  同时删除/usr/local/lnmp/nginx/html/index.html “重写网页1”里添加的内容
  nginx -t

  nginx -s>  网页测试
  效果同上
5.配置虚拟主机
  vim /usr/local/lnmp/nginx/conf/nginx.conf
DSC00024.jpg ##注释

DSC00025.jpg

  mkdir /www1 /www2
  vim /www1/index.html
  h1>www.server1
  vim /www2/index.html
  bbs.server2
  nginx -t

  nginx -s>  在物理机做好解析,在网页测试
DSC00026.jpg

DSC00027.jpg DSC00028.jpg

6.配置负载均衡
  实验主机: 172.25.38.1          nginx(主机1)
  172.25.38.2          apache(主机2)
  172.25.38.3          apache(主机3)
  172.25.38.250      物理机
  **主机2:
  vim /var/www/html/index.html
  www.westos.org-server2
  /etc/init.d/httpd start
  **主机3
  vim /etc/httpd/conf/httpd.conf                               ##还原httpd设置
  #NameVirtualHost *:80
  /etc/init.d/httpd start
  在网页中测试是否配置成功
  **主机1
  vim /usr/local/lnmp/nginx/conf/nginx.conf             ##添加和修改
DSC00029.jpg

DSC00030.jpg

  注意:
  http {
  upstream zhang{
  server 172.25.38.2:80;
  server 172.25.38.3:80;
  }
  server {
  listen 80;
  server_name www.westos.org;
  location / {
  proxy_pass http://zhang;
  }
  }
  网页测试:
DSC00031.jpg

  刷新------------>
DSC00032.jpg

  **物理机测试
  [kiosk@foundation38 ~]$ for i in $(seq 10); do curl www.westos.org;done
  www.westos.org-server2
  bbs.westos.org-server3
  www.westos.org-server2
  bbs.westos.org-server3
  www.westos.org-server2
  bbs.westos.org-server3
  www.westos.org-server2
  bbs.westos.org-server3
  www.westos.org-server2
  bbs.westos.org-server3
  几种模块举例
  (1).连续命中
DSC00033.jpg

  nginx -t

  nginx -s>
DSC00034.jpg

  (2)
DSC00035.jpg

DSC00036.jpg

  (3)
DSC00037.jpg

DSC00038.jpg

  说明:
  weight
  指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
  Ip_hash
  每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器。
  backup: 其他所有的非backup机器down或者忙的时候,请求backup机器
  nginx与apache的比较:
  1.轻量级,同样起web服务,比apache占用更少的内存及资源
  2.抗并发,nginx处理请求是异步非阻塞的,而apache是同步阻塞型的,在高并发下nginx能保持低资源低消耗高性能,apache是同步多进程模型,一个连接对应一个进程;nginx是异步,多个连接可以对应一个进程
  3.高度模块化的设计,编写模块相对简单
  4.nginx处理静态文件好,耗费内存少,一般动态请求要apache去做,nginx适合做静态和反向
  ***进程与线程**
  进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不止是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。通常在一个进程中可以包括若干个线程,它们可以利用进程所拥有的资源,在引入线程操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对他的调度所付出的开销就会小的多,能更高效的提高系统内多个程序间并发执行的程序。线程与进程的区别在于,子进程与父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文,多线程主要是为了节约cpu时间,发挥iu利用,根据具体情况而定。线程的运行中需要使用计算机的内存资源和cpu。
  1.进程间相互独立,通一进程的各线程间相互共享。某进程的各线程间共享。某进程内的线程在其它进程不可见。
  2.进程是具有一定独立功能的程序关于某个数据集合上的一个独立单位,线程是进程的一个实体,是cpu调度和分派的基本单位。
  *****阻塞,非阻塞*****
  进程/线程要访问的数据是否就绪,进程/线程是否需要等待
  阻塞调用是指调用结果返回之前,当前线程会被挂起,调用线端服务器。程只有在得到结果之后才会被返回。
  非阻塞调用是指在不能立刻得到结果之前,该调用不会阻塞当前线程
  **同步,异步**
  访问数据的方式,同步需要主动读写数据,在读写数据的过程中还是会阻塞,直到I/O操作完成;异步只需要I/O操作完成的通知,并不主动读写数据,由操作系统内核完成数据的读写。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-633883-1-1.html 上篇帖子: Nginx-bantiaomichong 下篇帖子: discuz的nginx配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表