LNMP架构

LNMP架构 

  
  
  
  
  1.  
  2. 一:LNMP ->Linux  Nginx   MySQL   Php  
  3. 架构使用软件包说明: 
  4. L :linux  kernel  2.6.18-308.el5 
  5. N:nginx   nginx-1.2.2.tar.gz(稳定版) 
  6. M:MySQL  mysql-5.5.24-linux2.6-i686.tar.gz 
  7. P:php      php-5.4.4.tar.bz2 
  8.  
  9. 架构前预安装环境 
  10. 安装开发包组 
  11. "Development Tools"和 "Development Libraries" 
  12. X Software Development 
  13. 为了让php支持mcrypt扩展,mhas扩展,需要安装如下软件包 
  14. libmcrypt-2.5.7-5.el5.i386.rpm 
  15. libmcrypt-devel-2.5.7-5.el5.i386.rpm 
  16. mcrypt-2.6.8-1.el5.i386.rpm 
  17. mhash-0.9.9-1.el5.centos.i386.rpm 
  18. mhash-devel-0.9.9-1.el5.centos.i386.rpm 
  19.  
  20. 为了让安装nginx的rewrite 模块需要 pcre 库 
  21. 同时还需要安装pcre-devel包 
  22. ssl 功能需要 openssl 库(在redhat 5.5 kernel 2.6.18中默认安装该库) 
  23.  
  24. 一:Nginx  
  25. 首选关于ngin的: 
  26. Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的 
  27.  
  28. Nginx 通过事件驱动相应多个用户 
  29. Nginx使用一个工作线程来响应多个不同的用户请求 
  30. 备注: 
  31. prework 是一个进程响应一个用户请求 
  32. worker是一个线程响应一个用户请求 
  33.  
  34. 为此nginx适合于高并发的场景需求,并且nginx对静态内容响应较快 
  35. 但是nginx不支持CGI 
  36. 在应用是nginx时,nginx主要是工作在web的前端,实现反向代理 
  37. 在linux的kernel 2.6以后引入了基于事件驱动的epoll模型, 通过内部某种机制实现突破了C10K 
  38. 那么nginx的    进程多少最优是取决服务器的CPU个数总和 
  39.  
  40. 基本的HTTP服务器特性: 
  41. 处理静态文件,索引文件以及自动索引;打开文件描述符缓存; 
  42. 使用缓存加速反向代理;简单负载均衡以及容错; 
  43. 远程FastCGI服务的缓存加速支持;简单的负载均衡以及容错; 
  44. 模块化的架构。过滤器包括gzip压缩、ranges支持、chunked响应、XSLT,SSI以及图像缩放。在SSI 过滤器中,一个包含多个SSI的页面,如果经由FastCGI或反向代理处理,可被并行处理; 
  45. 支持SSL,TLS SNI 
  46.  
  47. Nginx 部署: 
  48. 首先新建nginx 用户和用户组 
  49. groupadd –r nginx  
  50. useradd –r –g nginx –s /bin/false –M  nginx 
  51. 1.  tar xf  nginx-1.2.2.tar.gz 
  52. 2.  cd nginx-1.2.2  
  53. 3.  # ./configure \ 
  54. 4.    --prefix=/usr \----指定安装目录 
  55. 5.    --sbin-path=/usr/sbin/nginx \ 
  56. 6.    --conf-path=/etc/nginx/nginx.conf \----指定配置文件的路径 
  57. 7.    --error-log-path=/var/log/nginx/error.log \ ----指定错误log的路径 
  58. 8.    --http-log-path=/var/log/nginx/access.log \ 
  59. 9.    --pid-path=/var/run/nginx/nginx.pid  \ -----  指定pid的路径 
  60. 10.   --lock-path=/var/lock/nginx.lock \  
  61. 11.   --user=nginx \     ----- 以nginx 用户的身份执行 
  62. 12.   --group=nginx \----以nginx 组的身份执行 
  63. 13.   --with-http_ssl_module \ -----支持ssl模块 
  64. 14.   --with-http_flv_module \ 
  65. 15.   --with-http_stub_status_module \ 
  66. 16.   --with-http_gzip_static_module \ 
  67. 17.   -with-http-client-body-temp-path=/var/tmp/nginx/client/ \ 
  68. 18.   --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ 
  69. 19.   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ 
  70. 20.   --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ 
  71. 21.   --http-scgi-temp-path=/var/tmp/nginx/scgi \ 
  72. 22.   --with-http_perl_module----支持perl模块 
  73. 23.   --with-pcre----------支持rewrite 模块 
  74. 24. make && make install  
  75.  
  76. 好了,nginx部署完毕,接下来为nginx 配置启动脚本 
  77. 在/etc/rc.d/init.d/目录下新建文件nginx,添加如下内容 
  78. #!/bin/sh 
  79. # nginx - this script starts and stops the nginx daemon 
  80. # chkconfig:   - 85 15  
  81. # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \ 
  82. #               proxy and IMAP/POP3 proxy server 
  83. # processname: nginx 
  84. # config:      /etc/nginx/nginx.conf 
  85. # config:      /etc/sysconfig/nginx 
  86. # pidfile:     /var/run/nginx.pid 
  87.   
  88. # Source function library. 
  89. . /etc/rc.d/init.d/functions 
  90.   
  91. # Source networking configuration. 
  92. . /etc/sysconfig/network 
  93.   
  94. # Check that networking is up. 
  95. [ "$NETWORKING" = "no" ] && exit 0 
  96.   
  97. nginx="/usr/sbin/nginx" 
  98. prog=$(basename $nginx) 
  99.   
  100. NGINX_CONF_FILE="/etc/nginx/nginx.conf" 
  101.   
  102. [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx 
  103.   
  104. lockfile=/var/lock/subsys/nginx 
  105.   
  106. make_dirs() { 
  107.    # make required directories 
  108.    user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` 
  109.    options=`$nginx -V 2>&1 | grep 'configure arguments:'` 
  110.    for opt in $options; do 
  111.        if [ `echo $opt | grep '.*-temp-path'` ]; then 
  112.            value=`echo $opt | cut -d "=" -f 2` 
  113.            if [ ! -d "$value" ]; then 
  114.                # echo "creating" $value 
  115.                mkdir -p $value && chown -R $user $value 
  116.            fi 
  117.        fi 
  118.    done 
  119.   
  120. start() { 
  121.     [ -x $nginx ] || exit 5 
  122.     [ -f $NGINX_CONF_FILE ] || exit 6 
  123.     make_dirs 
  124.     echo -n $"Starting $prog: " 
  125.     daemon $nginx -c $NGINX_CONF_FILE 
  126.     retval=$? 
  127.     echo 
  128.     [ $retval -eq 0 ] && touch $lockfile 
  129.     return $retval 
  130.   
  131. stop() { 
  132.     echo -n $"Stopping $prog: " 
  133.     killproc $prog -QUIT 
  134.     retval=$? 
  135.     echo 
  136.     [ $retval -eq 0 ] && rm -f $lockfile 
  137.     return $retval 
  138.   
  139. restart() { 
  140.     configtest || return $? 
  141.     stop 
  142.     sleep 1 
  143.     start 
  144.   
  145. reload() { 
  146.     configtest || return $? 
  147.     echo -n $"Reloading $prog: " 
  148.     killproc $nginx -HUP 
  149.     RETVAL=$? 
  150.     echo 
  151.   
  152. force_reload() { 
  153.     restart 
  154.   
  155. configtest() { 
  156.   $nginx -t -c $NGINX_CONF_FILE 
  157.   
  158. rh_status() { 
  159.     status $prog 
  160.   
  161. rh_status_q() { 
  162.     rh_status >/dev/null 2>&1 
  163.   
  164. case "$1" in 
  165.     start) 
  166.         rh_status_q && exit 0 
  167.         $1 
  168.         ;; 
  169.     stop) 
  170.         rh_status_q || exit 0 
  171.         $1 
  172.         ;; 
  173.     restart|configtest) 
  174.         $1 
  175.         ;; 
  176.     reload) 
  177.         rh_status_q || exit 7 
  178.         $1 
  179.         ;; 
  180.     force-reload) 
  181.         force_reload 
  182.         ;; 
  183.     status) 
  184.         rh_status 
  185.         ;; 
  186.     condrestart|try-restart) 
  187.         rh_status_q || exit 0 
  188.             ;; 
  189.     *) 
  190.         echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" 
  191.         exit 2 
  192. esac 
  193. ----------------------以上脚本内容由马哥教育提供 
  194. 然后在赋予该脚本执行权限 chmod +x /etc/rc.d/init.d/nginx 
  195.  
  196. chkconfig –add nginx 
  197. chkconfig nginx on 
  198.  
  199. service nginx start 就可以启动nginx了 
  200. 测试一下 

  
  
  
  
  1. 在ngnix中新建虚拟主机 
  2. 基于不同主机名字的虚拟主机: 

 

验证一下测试结果

 

  
  
  
  
  1. 基于不同ip地址的虚拟主机 

 

验证结果:

 

  
  
  
  
  1. 在nginx的配置文件中的location中路径的匹配相关知识点: 
  2.  
  3. location 格式  location [=]|~|~*|^~|@  /uri/  
  4.   { 
  5.   ……. 
  6.  
  7. 省略的情况下代表 路径的本身及其内部 
  8. ~:代表 在做字符串的匹配时严格区分字符的大小写 
  9. ~*:在URI的字符串的正则表达式匹配时不区分大小写 
  10. =:精确匹配,仅匹配路径的本身 
  11. ^~:禁用正则表达式,后面的uri不做正则表达式匹配 
  12.  
  13. 另外在location中还可以使用别名的功能 
  14. 例如: 
  15.  location /www { 
  16.      
  17.    alias /web/vhosts/www 
  18.   } 
  19. 如果使用root的方式呢? 
  20. location /www { 
  21.  Root  /web/vhosts 
  22.  
  23. 在nginx中开启状态监控功能 
  24. location /nginx_status { 
  25. stub_status on; 
  26. access_log off; 
  27. 例如: 

  
  
  
  
  1. 以上是基于主机名开启状态监控,当然基于ip的同样也可以实现只是访问的方式略有不同。 

  
  
  
  
  1. 在nginx中实现基于用户的访问认证: 
  2. location { 
  3. auth_basic “Restricted(限定于某个位置提示信息)”; 
  4. auth_basic_user_file /etc/nginx/.htpasswd; 
  5.  
  6. 首先创建.htpasswd文件 
  7. htpasswd  -c –m /etc/nginx/.htpasswd jack 
  8. htpasswd –m /etc/nginx/.htpasswd tom 
  9. 说明:第一次创建文件是需要使用-c选项 

  
  
  
  
  1. 基于ssl的实现 

  
  
  
  
  1. 实验环境下创建CA 

  
  
  
  
  1. Nginx主机配置 

  
  
  
  
  1. CA签发证书 
  2. openssl ca -in nginx.csr -out nginx.crt 
  3. 验证结果: 

 

 注:由于写的较为仓促,难免可能会出现描述不清楚或者错误的地方,如果有还望指正,谢谢!!!

 

你可能感兴趣的:(nginx)