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

[经验分享] Nginx的基础原理及基本配置(一)

[复制链接]

尚未签到

发表于 2018-11-15 06:19:51 | 显示全部楼层 |阅读模式
  一、Nginx简介
  Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、 腾讯等。
  Nginx 可以在大多数 Unix like OS 上编译运行,并有 Windows 移植版,Nginx具有着众多优点。
  1)Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性;
  2)Nginx 作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务;
  3)Nginx 同时也是一个非常优秀的邮件代理服务器;
  4)Nginx 采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。
  5)Nginx 是一个安装非常的简单,配置文件非常简洁(还能够支持perl语法),Bugs非常少的服务器:Nginx 启动特别容易,并且能够平滑升级。
  2013年最新统计Nginx 在Web Server市场中所占的市场份额
DSC0000.jpg

  二、Nginx 的基本HTTP服务器特性
  1、处理静态文件,索引文件以及自动索引;打开文件描述符缓存;
  2、使用缓存加速反向代理,简单负载均衡以及容错;
  3、远程FastCGI,uwsgi,SCGI,和memcached服务的缓存加速支持;
  4、模块化的架构,过滤器包括gzip压缩、ranges支持、chunked响应、XSLT,SSI以及图像缩放。在SSI 过滤器中,一个包含多个SSI的页面,如果经由FastCGI或反向代理处理,可被并行处理;
  5、支持SSL,TLS SNI。
  三、Nginx 常用的其他HTTP服务器的特性
  1)基于名字和IP的虚拟主机;
  2)Keep-alive和pipelined连接支持;
  3)重新加载配置以及在线升级时,不需要中断正在处理的请求;
  4)自定义访问日志格式,带缓存的日志写操作以及快速日志轮转;
  5)3xx-5xx错误代码重定向;
  6)重写(rewrite)模块:使用正则表达式改变URI;
  7)基于客户端IP地址和HTTP基本认证机制的访问控制;
  8)来自同一地址的同时连接数或请求数限制,速度限制。
  四、Nginx 常用的架构和扩展性
  1)一个进程和多个工作进程;
  2)支持事件机制;
  3)支持AIO;
  4)支持sendfile;
  5)支持Accept-fileters.
  五、Nginx 的进程工作
  Nginx会按需同时运行多个进程:一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。
  1、主进程主要完成如下工作,主进程以root用户身份运行:
  1) 读取并验正配置信息;
  2) 创建、绑定及关闭套接字;
  3) 启动、终止及维护worker进程的个数;
  4) 无须中止服务而重新配置工作特性;
  5) 控制非中断式程序升级,启用新的二进制程序并在需要时回滚至老版本;
  6) 重新打开日志文件,实现日志滚动;
  7) 编译嵌入式perl脚本。
  2、worker进程主要完成的任务包括:
  1) 接收、传入并处理来自客户端的连接;
  2) 提供反向代理及过滤功能;
  3) nginx任何能完成的其它任务。
  3、cache loader进程主要完成的任务包括:
  1) 检查缓存存储中的缓存对象;
  2) 使用缓存元数据建立内存数据库。
  4、cache manager进程的主要任务是检查缓存的失效及过期检验;
  六、Nginx的编译安装
  1、下载nginx源码包,并将其解压;
[root@zly ~]# lftp 172.16.0.1  
lftp 172.16.0.1:~> cd pub/Sources/sources/nginx/
  
lftp 172.16.0.1:/pub/Sources/sources/nginx> ls
  
-rwxr--r--    1 500      500        767688 Sep 13 01:49 nginx-1.4.2.tar.gz
  
-rwxr--r--    1 500      500       1415582 Sep 13 08:35 tengine-1.4.6.tar.gz
  
-rwxr--r--    1 500      500       1437781 Sep 13 08:35 tengine-1.5.1.tar.gz
  
lftp 172.16.0.1:/pub/Sources/sources/nginx> get nginx-1.4.2.tar.gz
  
767688 bytes transferred
  
lftp 172.16.0.1:/pub/Sources/sources/nginx> bye
  
[root@zly ~]# ls
  
anaconda-ks.cfg  install.log  install.log.syslog  nginx-1.4.2.tar.gz
  
[root@zly ~]# tar xf nginx-1.4.2.tar.gz
  
[root@zly ~]# ls
  
anaconda-ks.cfg  install.log  install.log.syslog  nginx-1.4.2  nginx-1.4.2.tar.gz
  2、解决编译安装时所依赖的关系;
[root@zly ~]#  yum groupinstall "Development Tools" "Server Platform Deveopment"  
[root@zly ~]# yum -y install openssl-devel pcre-devel
  
Loaded plugins: fastestmirror, refresh-packagekit, security
  
Loading mirror speeds from cached hostfile
  
..........
  
Installed:
  pcre-devel.x86_64 0:7.8-6.el6
  
Complete!
  3、添加nginx用户,并以之运行nginx服务;
[root@zly ~]# groupadd -r nginx  
[root@zly ~]# useradd -r -g nginx nginx

  
[root@zly ~]#>  
uid=496(nginx) gid=493(nginx) groups=493(nginx)
  4、编译安装nginx;
[root@zly nginx-1.4.2]# ./configure --prefix=/usr   --sbin-path=/usr/sbin/nginx   --conf-path=/etc/nginx/nginx.conf   --error-log-path=/var/log/nginx/error.log   --http-log-path=/var/log/nginx/access.log   --pid-path=/var/run/nginx/nginx.pid    --lock-path=/var/lock/nginx.lock   --user=nginx   --group=nginx   --with-http_ssl_module   --with-http_flv_module   --with-http_stub_status_module   --with-http_gzip_static_module   --http-client-body-temp-path=/var/tmp/nginx/client/   --http-proxy-temp-path=/var/tmp/nginx/proxy/   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/   --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi   --http-scgi-temp-path=/var/tmp/nginx/scgi   --with-pcre  
[root@zly nginx-1.4.2]# make && make install
  5、为nginx服务提供Sysv init服务脚本
[root@zly nginx-1.4.2]# vim /etc/rc.d/init.d/nginx  * 服务脚本示例
#!/bin/sh  
#
  
# nginx - this script starts and stops the nginx daemon
  
#
  
# chkconfig:   - 85 15
  
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
  
#               proxy and IMAP/POP3 proxy server
  
# processname: nginx
  
# config:      /etc/nginx/nginx.conf
  
# config:      /etc/sysconfig/nginx
  
# pidfile:     /var/run/nginx.pid
  
# Source function library.
  
. /etc/rc.d/init.d/functions
  
# Source networking configuration.
  
. /etc/sysconfig/network
  
# Check that networking is up.
  
[ "$NETWORKING" = "no" ] && exit 0
  
nginx="/usr/sbin/nginx"
  
prog=$(basename $nginx)
  
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
  
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
  
lockfile=/var/lock/subsys/nginx
  
make_dirs() {
  # make required directories
  user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
  options=`$nginx -V 2>&1 | grep 'configure arguments:'`
  for opt in $options; do
  if [ `echo $opt | grep '.*-temp-path'` ]; then
  value=`echo $opt | cut -d "=" -f 2`
  if [ ! -d "$value" ]; then
  # echo "creating" $value
  mkdir -p $value && chown -R $user $value
  fi
  fi
  done
  
}
  
start() {
  [ -x $nginx ] || exit 5
  [ -f $NGINX_CONF_FILE ] || exit 6
  make_dirs
  echo -n $"Starting $prog: "
  daemon $nginx -c $NGINX_CONF_FILE
  retval=$?
  echo
  [ $retval -eq 0 ] && touch $lockfile
  return $retval
  
}
  
stop() {
  echo -n $"Stopping $prog: "
  killproc $prog -QUIT
  retval=$?
  echo
  [ $retval -eq 0 ] && rm -f $lockfile
  return $retval
  
}
  
restart() {
  configtest || return $?
  stop
  sleep 1
  start
  
}
  
reload() {
  configtest || return $?
  echo -n $"Reloading $prog: "
  killproc $nginx -HUP
  RETVAL=$?
  echo
  
}
  
force_reload() {
  restart
  
}
  
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
  
}
  
rh_status() {
  status $prog
  
}
  
rh_status_q() {
  rh_status >/dev/null 2>&1
  
}
  
case "$1" in
  start)
  rh_status_q && exit 0
  $1
  ;;
  stop)
  rh_status_q || exit 0
  $1
  ;;
  restart|configtest)
  $1
  ;;
  reload)
  rh_status_q || exit 7
  $1
  ;;
  force-reload)
  force_reload
  ;;
  status)
  rh_status
  ;;
  condrestart|try-restart)
  rh_status_q || exit 0
  ;;
  *)
  echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
  exit 2
  
esac
  6、将nginx加入服务列表中,并启动nginx服务;
[root@zly nginx-1.4.2]# vim /etc/rc.d/init.d/nginx  
[root@zly nginx-1.4.2]# chmod +x /etc/rc.d/init.d/nginx
  
[root@zly nginx-1.4.2]# chkconfig --add nginx
  
[root@zly nginx-1.4.2]# chkconfig nginx on
  
[root@zly nginx-1.4.2]# chkconfig --list nginx
  
nginx           0:off   1:off   2:on    3:on    4:on    5:on    6:off
  
[root@zly nginx-1.4.2]# service nginx start
  
Starting nginx:                                            [  OK  ]
  7、测试nginx服务,访问相关http页面。
DSC0001.jpg

  七、Nginx的配置文件
  /etc/nginx/nginx.conf
  1、主要分两段:全局配置段和http配置段
  2、全局配置段:主要有user段和worker段
  * 全局配置段示例
#user  nobody;  
worker_processes  1;
  
#error_log  logs/error.log;
  
#error_log  logs/error.log  notice;
  
#error_log  logs/error.log  info;
  
#pid        logs/nginx.pid;
  
events {
  worker_connections  1024;
  
}
  3、http配置段:http上下文四件套
  http --> server --> location --> if
  * 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;
  sendfile        on;
  #tcp_nopush     on;
  #keepalive_timeout  0;
  keepalive_timeout  65;
  #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;
  }
  #error_page  404              /404.html;
  }
  4、HTTPS server段
# HTTPS server  #
  #server {
  #    listen       443;
  #    server_name  localhost;
  #    ssl                  on;
  #    ssl_certificate      cert.pem;
  #    ssl_certificate_key  cert.key;
  #    ssl_session_timeout  5m;
  #    ssl_protocols  SSLv2 SSLv3 TLSv1;
  #    ssl_ciphers  HIGH:!aNULL:!MD5;
  #    ssl_prefer_server_ciphers   on;
  #    location / {
  #        root   html;
  #        index  index.html index.htm;
  #    }
  #}
  八、Nginx配置文件应用示例
  Nginx 官方配置文档http://nginx.org/en/
  1、全局配置段在核心模块 Core functionality模块上http://nginx.org/en/docs/ngx_core_module.html。
DSC0002.jpg

  2、http配置段在 HTTP Core模块。
DSC0003.jpg

  3、server配置段在 HTTP Core模块下的 server模块。
DSC0004.jpg

  4、location配置段在 HTTP Core模块下的 location模块。
DSC0005.jpg

  5、实现服务访问控制的配置在 Access模块与Auth Basic模块。
  1)*实现基于虚拟主机ip的访问控制
[root@ zly ~]# vim /etc/nginx/nginx.conf  
worker_processes  2;
  
........
  
events {
  worker_connections  1024;
  
}
  
........
  sendfile        on;
  
........
  keepalive_timeout  5;
  
........
  server {
  listen      172.16.20.1:80;
  server_name  localhost;
  root /web/vhost1;
  location / {
  root   /web/vhost1;
  index index.html;
  }
  }
  server {
  listen      172.16.20.3:80;
  server_name  xiaozheng;
  root /web/vhost2;
  
[root@ zly ~]# mkdir -pv /web/{vhost1,vhost2}
  
mkdir: created directory `/web'
  
mkdir: created directory `/web/vhost1'
  
mkdir: created directory `/web/vhost2'
  
[root@ zly ~]# vim /web/vhost1/index.html
  
Welcom to zly Host1
  
[root@ zly ~]# vim /web/vhost2/index.html
  
Welcom to new Host2
  
[root@ zly ~]# ifconfig eth0:1 172.16.20.3 up
  
[root@ zly ~]# ifconfig
  
eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:38:7F:85
  inet addr:172.16.20.3  Bcast:172.16.255.255  Mask:255.255.0.0
  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
  
[root@ zly ~]# service nginx restart
  
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  
nginx: configuration file /etc/nginx/nginx.conf test is successful
  
Stopping nginx:                                            [  OK  ]
  
Starting nginx:                                            [  OK  ]
  
[root@ zly ~]# ss -tanlp | grep nginx
  
LISTEN     0      128             172.16.20.3:80                       *:*      users:(("nginx",2628,7),("nginx",2629,7),("nginx",2630,7))
  
LISTEN     0      128             172.16.20.1:80                       *:*      users:(("nginx",2628,6),("nginx",2629,6),("nginx",2630,6))
  访问nginx页面
DSC0006.jpg

DSC0007.jpg

  注:同理基于虚拟主机名或虚拟主机端口,只需要在两个server配置段定义不同的主机名或不同的虚拟主机端口
  2)*实现nginx服务的Auth Basic访问控制
[root@ zly ~]# useradd zly  
[root@ zly ~]# useradd xiaozheng
  
[root@ zly ~]# htpasswd -c -m /etc/nginx/.htpasswd zly
  
New password:
  
Re-type new password:
  
Adding password for user zly
  
[root@ zly ~]# htpasswd -c -m /etc/nginx/.htpasswd xiaozheng
  
New password:
  
Re-type new password:
  
Adding password for user xiaozheng
  
[root@ zly ~]# vim /etc/nginx/nginx.conf
  server {
  listen      172.16.20.1:80;
  server_name  localhost;
  root /web/vhost1;
  auth_basic "Restricted Area";
  auth_basic_user_file /etc/nginx/.htpasswd;
  location / {
  root   /web/vhost1;
  index index.html;
  }
  }
  
[root@ zly ~]# nginx -t
  
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  
nginx: configuration file /etc/nginx/nginx.conf test is successful

  
[root@ zly ~]# service nginx>  
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  
nginx: configuration file /etc/nginx/nginx.conf test is successful
  
Reloading nginx:                                           [  OK  ]
DSC0008.jpg

  6、实现自动索引文件 Auto Index模块。
  7、自定义响应报文首部配置在 Headers模块上。
  8、实现uri重写的配置在Rewrite模块上。



运维网声明 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.yunweiku.com/thread-635098-1-1.html 上篇帖子: Nginx学习日记第五篇 -- upstream及fastcgi 下篇帖子: Centos6.4 源码安装nginx之LNMP
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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