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

[经验分享] nginx和lnmp架构

[复制链接]

尚未签到

发表于 2018-11-14 11:15:04 | 显示全部楼层 |阅读模式
  nginx的概述及常见Web服务器的介绍:
  Unix和Linux平台下的常用Web服务器有Apache、 Nginx、 Lighttpd、 Tomcat、 IBM WebSphere等。其中目前应用最广泛的Web服务器是Apache。 Windows平台下最常用的服务器则是微软公司的IIS(Internet Information Server)。
  1)Apache服务器
  Apache 起初由 Illinois 大学 Urbana-Champaign 的国家高级计算程序中心开发。此后Apache 被开放源代码团体的成员不断的发展和加强。1996年4月以来,Apache一直是Internet上最流行的HTTP服务器,1999年5月它在 57% 的网页服务器上运行,到了2005年7月这个比例上升到69%。Apache是目前世界上用的最多的Web服务器,它有优势主要在于源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Linux、Windows系统平台之上)。Apache的模块支持非常丰富,以至于它提供了非常完善的功能。
  Apache的官方网站: http://www.apache.org
  2)Lighttpd 服务器
  Lighttpd是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的Web server环境。具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。Lighttpd是众多OpenSource轻量级的Web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能,而Apache之所以流行,很大程度也是因为功能丰富,在Lighttpd 上很多功能都有相应的实现了,这点对于Apache的用户是非常重要的,因为迁移到Lighttpd就必须面对这些问题。
  Lighttpd的官方网站: http://www.lighttpd.net
  3)Tomcat服务器
  Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现。Tomcat即是一个Jsp和Servlet的运行平台。同时Tomcat又不仅仅是一个Servlet容器,它也具有传统的Web服务器的功能:处理Html页面,但是与Apache相比,它的处理静态Html的能力就不如Apache,我们可以将Tomcat和Apache集成到一块,让Apache处理静态Html,而Tomcat处理Jsp和Servlet。这种集成只需要修改一下Apache和Tomcat的配置文件即可。
  Tomcat的官方网站: http://tomcat.apache.org
  4)IBM WebSphere (weblogic/jboss)
  WebSphere Application Server 是 一 种功能完善、开放的Web应用程序服务器,是IBM电子商务计划的核心部分。基于Java和Servlets的Web应用程序运行环境,包含了为Web站点提供服务所需的一切,运 行 时 可 以 协 同 并 扩 展Apache、Netscape、 IIS 和IBM 的HTTPWeb服务器,因此可以成为强大的Web应用服务器。
  WebSphere的官方网站: http://www.ibm.com
  5)Windows IIS
  IIS 是Internet Information Server的缩写,它是微软公司主推的服务器。IIS与Window NT Server完全集成在一起,因而用户能够利用Windows NT Server和NTFS(NT File System,NT的文件系统)内置的安全特性,建立强大,灵活而安全的Internet和Intranet站点。 IIS支持HTTP(Hypertext Transfer Protocol,超文本传输协议),FTP(File Transfer Protocol,文件传输协议)以及SMTP协议,通过使用CGI和ISAPI,IIS可以得到高度的扩展。
  IIS的官方网站: http://www.iis.net
  6)Nginx的介绍
  Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP/FTP 代理服务器。Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发的,它已经在该站点运行超过两年半了。Igor Sysoev在建立的项目时,使用基于BSD许可。自Nginx 发布四年来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
  在俄罗斯许多大网站都已经使用它, 且一直表现不凡。截至2007年4月,俄罗斯大约有20%左右的虚拟主机是由nignx服务或代理的。Google在线安全博客中统计Nginx服务或代理了大约所有Internet虚拟主机的4%。而Netcraft的统计显示,Nginx服务的主机在过去的一年里以四倍的速度增长并且在这几年里,它的排名还在不断上升,下图为Netcraft截止至2012年1月的统计。 (http://news.netcraft.com/)
  nginx安装和启动
  安装pcre
  安装openssl
  安装zlib
  安装nginx
  yum -y install gcc openssl-devel pcre-devel zlib-devel
  yum -y install nginx
  了解软件目录结构
  [root@node1 ~]# find /opt/nginx/ -maxdepth 1 -type d
  /opt/nginx/
  /opt/nginx/conf  配置文件
  /opt/nginx/logs  日志
  /opt/nginx/html  页面家目录
  /opt/nginx/sbin  二进制命令
  [root@node1 ~]# find /opt/nginx/
  /opt/nginx/
  /opt/nginx/conf
  /opt/nginx/conf/win-utf
  /opt/nginx/conf/uwsgi_params.default  --模板
  /opt/nginx/conf/fastcgi_params.default
  /opt/nginx/conf/mime.types  ---识别类型
  /opt/nginx/conf/nginx.conf  ---主配置文件
  /opt/nginx/conf/uwsgi_params  --内部变量
  /opt/nginx/conf/scgi_params.default
  /opt/nginx/conf/fastcgi_params   --PHP相关
  /opt/nginx/conf/scgi_params  --程序
  /opt/nginx/conf/koi-utf  ---编码
  /opt/nginx/conf/fastcgi.conf ---fastcgi配置文件
  /opt/nginx/conf/mime.types.default
  /opt/nginx/conf/fastcgi.conf.default
  /opt/nginx/conf/koi-win
  /opt/nginx/conf/nginx.conf.default
  /opt/nginx/logs
  /opt/nginx/html
  /opt/nginx/html/index.html  ---首页
  /opt/nginx/html/50x.html    ---错误代码
  /opt/nginx/sbin
  /opt/nginx/sbin/nginx  --二进制命令
  nginx启动
  注意 关闭占用80端口的程序
  [root@node1 ~]# /opt/nginx/sbin/nginx
  [root@node1 ~]# netstat -tnlp |grep nginx
  [root@node1 ~]# ps aux |grep nginx
  平滑方式关闭(正常退出服务)
  [root@node1 ~]# pkill -15 nginx
  直接关闭
  [root@node1 ~]# pkill -9 nginx
  完善环境变量
  [root@node1 ~]# echo "export PATH=$PATH:/opt/nginx/sbin" >> ~/.bashrc
  [root@node1 ~]# which nginx
  /opt/nginx/sbin/nginx
  定制启动脚本
  [root@node1 ~]# cp /root/lnmp/nginx.init.d /etc/rc.d/init.d/nginx
  [root@node1 ~]# chmod +x /etc/rc.d/init.d/nginx
  [root@node1 ~]# chkconfig nginx on
  [root@node1 ~]# service nginx restart
  nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok
  nginx: configuration file /opt/nginx/conf/nginx.conf test is successful
  Stopping nginx:                                            [  OK  ]
  Starting nginx:                                            [  OK  ]
  检测配置文件的语法
  [root@node1 ~]# nginx -t
  nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok
  nginx: configuration file /opt/nginx/conf/nginx.conf test is successful
  [root@node1 ~]# cat /opt/nginx/conf/nginx.conf |grep -v '^$'  |grep -v '.*#'
  user  nginx nginx;
  worker_processes  2;
  error_log  logs/error.log  info;
  pid        logs/nginx.pid;
  events {
  use epoll;
  worker_connections  2048;
  }
  http {
  include       mime.types;
  default_type  application/octet-stream;
  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  '$status $body_bytes_sent "$http_user_agent" "$www.abc.com" >> /etc/hosts
  elinks http://www.abc.com
  Nginx 网站服务配置示例
  添加 nginx 状态统计
  Nginx下的虚拟主机配置
  访问控制
  +++nginx 正则表达式+++
  location的匹配顺序:
  1、=   严格匹配这个查询,如果匹配到,则停止搜索
  2、~    匹配正则表达式,区分大小写
  3、~*   匹配正则表达式,不区分大小写
  4、!~*  取反
  使用正则表达式,区分大小写
  [root@node1 ~]# vim /opt/nginx/conf/nginx.conf
  location ~ ^/a\.html$ {
  root /test1;
  index  index.html;
  }
  [root@node1 ~]# mkdir /test1
  [root@node1 ~]# echo 'this is test1 dir Test page' > /test1/a.html
  [root@i ~]# elinks -dump http://192.168.0.1/a.html
  this is test1 dir Test page
  使用正则表达式,不区分大小写
  location ~* ^/Status {
  stub_status on;
  }
  [root@i ~]# elinks -dump http://192.168.0.1/status
  [root@i ~]# elinks -dump http://192.168.0.1/STATUS
  精确匹配
  [root@node1 ~]# vim /opt/nginx/conf/nginx.conf
  location = /a.html {
  root /test2;
  index index.html;
  }
  [root@node1 ~]# mkdir /test2
  [root@node1 ~]# echo 'this is test2 dir Test page' > /test2/a.html
  结论
  等号(=)与( / )的对比,结论:等号的优先级别比( / )的高,(其实等号的优先级别是最高的)
  正则表达式的优先级别仅次于等号
  如果正则表达式之间有冲突,则按照最详细的正则表达式优先匹配
  +++Nginx下的虚拟主机配置+++
  基于端口
  基于IP
  基于域名
  -----------------基于端口---------------------
  server {
  listen       80;
  #server_name  www.abc.com;
  charset utf-8;
  access_log  logs/www.abc.access.log  main;
  location / {
  root   /www1;
  index  index.html index.htm;
  }
  location ~* ^/Status {
  stub_status on;
  }
  }
  server {
  listen       8000;
  #server_name  www.abc.com;
  charset utf-8;
  access_log  logs/www.abc.access.log  main;
  location / {
  root   /www2;
  index  index.html index.htm;
  }
  location ~* ^/Status {
  stub_status on;
  }
  }
  }
  [root@node1 html]# mkdir /www{1..2} -p
  [root@node1 html]# echo www1 > /www1/index.html
  [root@node1 html]# echo www2 > /www2/index.html
  [root@node1 html]# service nginx restart
  [root@node1 html]# netstat -tnlp |grep nginx
  tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      7201/nginx
  tcp        0      0 0.0.0.0:8000                0.0.0.0:*                   LISTEN      7201/nginx
  [root@i ~]# elinks -dump http://192.168.0.1:80
  [root@i ~]# elinks -dump http://192.168.0.1:8000
  -----------------基于IP地址---------------------
  [root@node1 html]# ifconfig eth0 192.168.0.X1 up
  [root@node1 html]# ifconfig eth0:0 192.168.0.X2 up
  [root@node1 html]# vim /opt/nginx/conf/nginx.conf
  listen       192.168.0.X1:80;
  listen       192.168.0.X2:80;
  [root@node1 html]# service nginx restart
  [root@node1 html]# netstat -tnlp |grep nginx
  tcp        0      0 192.168.0.10:80             0.0.0.0:*                   LISTEN      7283/nginx
  tcp        0      0 192.168.0.1:80              0.0.0.0:*                   LISTEN      7283/nginx
  测试:
  [root@i ~]# elinks -dump http://192.168.0.1
  www1
  [root@i ~]# elinks -dump http://192.168.0.10
  www2
  [root@node1 html]# mkdir /www{1..2} -p
  [root@node1 html]# echo www1 > /www1/index.html
  [root@node1 html]# echo www2 > /www2/index.html
  -------------基于域名------------------------
  www.abc.com 192.168.0.1
  www.bcd.com 192.168.0.1
  ---------------
  listen       80;
  server_name  www.abc.com;
  listen       80;
  server_name  www.bcd.com;
  --------------
  测试过程
  [root@i ~]# echo "192.168.0.1 > /etc/hosts
  [root@i ~]# echo "192.168.0.1 > /etc/hosts
  [root@i ~]# elinks -dump http://www.abc.com
  www1
  [root@i ~]# elinks -dump http://www.bcd.com
  www2
  访问控制
  目录的访问控制:
  1、根据账号密码进行访问控制
  2、根据客户端的源地址进行访问控制
  3、结合正则表达式和文件类型做访问控制
  [root@node1 html]# vim /opt/nginx/conf/nginx.conf
  location ~* ^/Status {
  stub_status on;
  auth_basic "status login";
  auth_basic_user_file  "/opt/nginx/conf/.htpasswd";
  }
  设置用户与密码
  [root@node1 html]# vim /opt/nginx/conf/.htpasswd
  [root@node1 html]# grub-md5-crypt
  Password:
  Retype password:
  $1$3eyLv$FRqUzfIiHgGJb00B0l0M4/
  [root@node1 html]# vim /opt/nginx/conf/.htpasswd
  user01:$1$3eyLv$FRqUzfIiHgGJb00B0l0M4/
  [root@node1 html]# service nginx restart
  [root@i ~]# elinks  http://192.168.0.1/status
  ++++根据客户端的源地址进行访问控制++++
  location ~* ^/abc/save\.txt$ {
  root /www1;
  index index.html;
  allow 192.168.0.0/24;
  }
  [root@node1 html]# mkdir /www1/abc
  [root@node1 html]# echo "&*&*(" > /www1/abc/save.txt
  [root@i ~]# elinks  http://www.abc.com/abc/save.txt
  允许某一个网段/拒绝某一个IP地址
  location ~* ^/abc/save\.txt$ {
  root /www1;
  index index.html;
  deny 192.168.0.254;
  allow 192.168.0.0/24;
  }
  [root@i ~]# elinks -dump  http://www.abc.com/abc/save.txt
  403 Forbidden
  结合正则表达式和文件类型做访问控制
  server {
  listen       80;
  server_name  www.bcd.com;
  charset utf-8;
  access_log  logs/www.abc.access.log  main;
  location ~* \.(txt|doc) {
  root /www2;
  index index.html;
  deny all;
  }
  }
  [root@node1 www2]# echo deny_test1 > /www2/a1.txt
  [root@node1 www2]# echo deny_test2 > /www2/a1.doc
  [root@i ~]# elinks -dump  http://www.bcd.com/a1.txt
  [root@i ~]# elinks -dump  http://www.bcd.com/a2.doc
  拒绝访问某一个目录
  location ~* ^/install {
  root /www2;
  index index.html;
  deny all;
  }
  [root@node1 www2]# mkdir install
  [root@node1 www2]# cp /etc/passwd install/
  [root@i ~]# elinks -dump  http://www.bcd.com/install/passwd
  403 Forbidden
  禁止单个目录
  location  = /searchword/cron/ {
  deny all;
  }
  配置Nginx实现https
  443 --- https
  httpd ssl(openssl)
  证书的颁发机构 CA
  /\
  私钥     证书(公钥)
  # cd /etc/pki/tls/certs/
  # make server.key--生成私钥
  # openssl rsa -in server.key -out server.key --去除私钥的加密密码
  # make server.csr--生成证书颁发机构(CA)
  # openssl x509 -in server.csr -req  -signkey server.key -days 365 -out server.crt--生成证书
  1 CA机构 获取私钥与公钥
  2 发布页面的时候填写私钥与公钥
  3 对外发布https:443
  [root@node1 certs]# vim /opt/nginx/conf/nginx.conf
  server {
  listen       443;
  server_name  www.cde.com;
  ssl                  on;
  ssl_certificate      /etc/pki/tls/certs/server.crt;
  ssl_certificate_key  /etc/pki/tls/certs/server.key;
  ssl_session_timeout  5m;
  ssl_protocols  SSLv2 SSLv3 TLSv1;
  ssl_ciphers  HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers   on;
  location / {
  root   /www3;
  index  index.html index.htm;
  }
  }
  [root@node1 certs]# service nginx restart
  [root@node1 certs]# mkdir /www3
  [root@node1 certs]# echo www3 > /www3/index.html
  测试
  [root@i ~]# echo "192.168.0.1 > /etc/hosts
  https://www.cde.com/
  整合LNMP
  ++++++++++++++++++编译php++++++++++++++++++++
  [root@node1 php-5.5.3]# yum -y install libxml2-devel
  [root@node1 ~]# tar xf /root/lnmp/php-5.5.3.tar.bz2 -C /usr/local/src/
  [root@node1 ~]# cd /usr/local/src/php-5.5.3/
  [root@node1 php-5.5.3]# ./configure --prefix=/opt/php5 --with-config-file-path=/opt/php5  --enable-fpm --with-mysql
  --prefix=/opt/php5
  --with-config-file-path=/opt/php5
  --enable-fpm (--enable-fastcgi  旧版本的选项  新的版本选项 --enable-fpm)
  --with-mysql
  [root@node1 php-5.5.3]#  make && make install
  配置PHP的  fpm方式
  1) 生成php的主配置文件
  [root@node1 php-5.5.3]# cp php.ini-production /opt/php5/php.ini
  fpm默认配置文件与二进制命令php-fpm
  [root@node1 ~]# find /opt/php5/|grep fpm |tail -2
  /opt/php5/etc/php-fpm.conf.default
  /opt/php5/sbin/php-fpm
  2) 生成php-fpm的配置文件
  [root@node1 ~]# cd /opt/php5/etc/
  [root@node1 etc]# cp php-fpm.conf.default php-fpm.conf
  3)启动与关闭
  启动
  [root@node1 etc]# /opt/php5/sbin/php-fpm -c /opt/php5/etc/php-fpm.conf
  [root@node1 etc]# netstat -tnlp |grep php
  tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      19345/php-fpm
  [root@node1 etc]# ps aux |grep php
  关闭
  [root@node1 etc]# pkill -9 php
  4) 设置php-fpm
  [root@node1 etc]# vim /opt/php5/etc/php-fpm.conf
  [www]
  user = nobody
  group = nobody
  listen = 192.168.0.1:9000
  pm = dynamic ---动态
  pm.max_children = 10  最大开启10个
  pm.start_servers = 4  默认启动开启4个
  pm.min_spare_servers = 2 空闲最小开启1个
  pm.max_spare_servers = 8 空闲最大开启2个
  [root@node1 etc]# echo "/opt/php5/sbin/php-fpm -c /opt/php5/etc/php-fpm.conf" >> /etc/rc.local
  [root@node1 etc]# source  /etc/rc.local
  [root@node1 etc]# ps aux |grep php |grep pool |wc -l  --四个进程
  [root@node1 etc]# netstat -tnlp |grep php
  tcp        0      0 192.168.0.1:9000            0.0.0.0:*                   LISTEN      19438/php-fpm
  整合lamp
  上传论坛 BBS discuz
  [root@node1 ~]# mkdir /webserver/bbs01
  [root@node1 lnmp]# unzip Discuz_X3.1_SC_UTF8.zip
  [root@node1 lnmp]# mv upload/* /webserver/bbs01/
  发布页面
  [root@node1 lnmp]# vim /opt/nginx/conf/nginx.conf
  user  nginx nginx;
  worker_processes  2;
  error_log  logs/error.log  info;
  pid        logs/nginx.pid;
  events {
  use epoll;
  worker_connections  1024;
  }
  http {
  include       mime.types;
  default_type  application/octet-stream;
  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  '$status $body_bytes_sent "$http_user_agent" "$ create database bbs01 default charset utf8;

  mysql> grant all on bbs01.* to 'runbbs01'@'localhost'>  [root@node1 lnmp]# cd /webserver/bbs01/
  [root@node1 bbs01]# chmod 777 data/ uc_client/ uc_server/ config/ -R
  http://bbs01.uplooking.com/install


运维网声明 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-634946-1-1.html 上篇帖子: Tomcat+Nginx+Memcached集群部署 下篇帖子: Apache和nginx 301重定向
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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