Nginx网站服务(企业网站架构部署与优化)

LAMP:

php模块给apache一个进程去解析动态网页。

LNMP:

cgi (早期的)

fast-cgi (现在的)

运行一个php-fpm进程,该进程负责解析php文件。

nginx--》LAMP=LNAMP(既有nginx,也有apache。)

一、Nginx的介绍

在各种网站服务器软件中,除了 Apache HTTP Server 外,还有一款轻量级的 HTTP服务器软件——Nginx,由俄罗斯的 Igor Sysoev 开发,其稳定、高效的特性逐渐被越来越多的用户认可。

Nginx(发音为[engine x])专为性能优化而开发,其最知名的优点是它的稳定性和低系统资源消耗,以及对 HTTP 并发连接的高处理能力(单台物理服务器可支持 30000~50000个并发请求)。正因为如此,大量提供社交网络、新闻资讯、电子商务及虚拟主机等服务的企业纷纷选择 Nginx 来提供 Web 服务。

Nginx的应用场景

Nginx和Apache的区别

1、编译安装Nginx

(1)安装支持软件

Nginx 的配置及运行需要 pcre、zlib 等软件包的支持,因此应预先安装这些软件的开发包(devel)以便提供相应的库和头文件,确保 Nginx 的安装顺利完成

(2)创建运行用户、组

Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限,增加灵活性、降低安全风险。例如,创建一个名为 nginx 的用户,不建立宿主文件夹,也禁止登录到 Shell 环境。

(3)编译安装 Nginx

配置 Nginx 的编译选项时,将安装目录设为/usr/local/nginx,运行用户和组均设为nginx;启用 http_stub_status_module 模块以支持状态统计,便于查看服务器的连接信息。为了使 Nginx 服务器的运行更加方便,可以为主程序 nginx创建链接文件,以便管理员直接执行“nginx”命令就可以调用 Nginx 的主程序。

先关闭防火墙和内核安全机制!

解压:tar zxvf nginx-1.12.0.tar.gz

cd到解压目录,安装编译环境及网站所需的工具:

yum -y install pcre-devel zlib-devel gcc* openssl -devel

正则表达式 压缩工具 基于c语言的编译环境 ssl加密

为了服务安全着想,创建一个普通用户去跑这个服务;

useradd -M -s /sbin/nologin nginx

开始配置:

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module

指定安装路径,登录用户及用户组,ssl加密,统计nginx状态信息。

然后开始编译:

make && make install

命令优化:

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

如何开启或关闭nginx呢?

nginx开启

nginx -s stop 关闭 nginx的进程用kill -9 可能杀不死。

pkill -9 nginx 关闭

那如何重载?

killall -1 nginx

使得nginx成为系统服务:

创建一个进程的管理文件,而这个文件是一个脚本,最后要给一个执行权的。

首先:cd /etc/init.d

vim nginx

这样的写法是用init的进程去管理的;

扩展:如果要用systemd进程去管理;要在/lib/systemd/system创建一个nginx.service文件并写入以下参数;

[Unit]

Description=The NGINX HTTP and reverse proxy server

After=network.target

[Service]

Type=forking

PIDFile=/usr/local/nginx/logs/nginx.pid

#ExecStartPre=/usr/local/sbin/nginx -t

ExecStart=/usr/local/sbin/nginx

ExecStop=/usr/sbin/nginx -s stop

ExecReload=/usr/local/sbin/nginx -s reload

[Install]

WantedBy=multi-user.target

最后重载守护进程: systemctl daemon-reload

给这个脚本执行权:chmod +x nginx

再添加到系统服务:chkconfig --add nginx

打开nginx的主配置文件进行修改:

给站点起一个名字;以后如果需要做虚拟主机,这个地方也是必填项。

访问控制:

yum -y install httpd-tools 先安装工具集;里面有htpasswd。

  再对这个文件进行一些权限上的控制;安全着想,只给属主一个读的权限,再把属主改为’nginx‘用户

再利用该文件对访问进行控制:

进去nginx的主配置文件中进行修改:

vim /usr/local/nginx/conf/nginx.cong

检查语法结构是否有错,并且重启该服务;

再基于IP或网段进行控制:

再打开配置文件;将之前的语句注释掉;

仅拒绝来自192.168.10.102的主机进行访问,其他的都允许;

那如何实现仅允许呢?

仅允许来自192.168.10.102的主机进行访问,其他的都拒绝;

虚拟主机:与apache一样都支持三种虚拟主机,一种基于域名,一种基于IP,一种基于端口。

如何实现基于域名的虚拟主机;

进入到主配置文件中把第二个服务给写出来;

首先先把第一个站点目录给指定出来:

再把系统原有的预留模版语句注释给去掉,并加以修改:

注意书写内容的位置,不要写到第一个服务的语句中:

然后重启服务,因为是源码安装的,站点目录不会自行创建出来,手动创建出站点目录及主页文件;

然后再打开一个客户机,把两个域名对应一个IP给写到hosts文件中:

路径在/etc/hosts

然后测试:

如何基于IP搭建虚拟主机:

进入网卡的主配置文件中进行修改:

ens33:0ip为192.168.10.211

ens33:1ip为192.168.10.212

然后再进入nginx的主配置文件进行修改:

改完重启nginx服务,用客户机进行测试:

这样基于IP的虚拟主机就搭建好了;一个主机运行两个服务,用户使用不同的ip可以访问不同的服务;

基于端口搭建虚拟主机:

其实基于IP和基于端口,都是在基于域名的基础上进行改进的:

再进入配置文件;

重启服务后生效;用客户机进行验证:

基于端口是对客户不太友好的,如果客户要访问服务器还要指定端口;

现在开始搭建LNMP:

这里采用简单的装法,使用yum的方式进行安装:

如果安装的是mariadb是客户端的,-server是服务器端的。

yum -y install mariadb-server

yum 安装的mariadb是没有密码的;这里改一下密码:

mysqladmin -u root password'pwd123'

然后源码安装PHP;

       解压:tar zxvf php-5.5.38.tar.gz

然后cd到解压目录;

先安装使用的工具及编译环境:

yum -y install gd libxml2-devel libjpeg-devel libpng-devel gcc*

然后进行配置:

./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm

如果mysql和php不在同主机,要在mysql上进行授权:

首先进入mysql数据库,然后配置:

配置完之后,更新授权信息;flush privileges;

 

提示这样的相关语句代表配置成功:

补充:

如果使用yum的方式搭建LAMP如何实现?

yum -y install httpd mariadb-server mariadb php php-myslq

接着上面的操作继续。开始编译及编译后安装:

make && make install        

然后进行一些优化:

在解压目录下拷贝配置文件的时候指定的路径:

cp php.ini-development /usr/local/php5/php.ini

以及命令的优化:

ln -s /usr/local/php5/bin/* /usr/local/bin/

ln -s /usr/local/php5/sbin/* /usr/local/sbin/

再对fpm进程的配置文件进行调整:

拷贝并重命名模版文件;创建php的用户;不创建家目录及指定登录shell配置。

对该文件进行优化:

如何启动该进程及查询该进程的状态:

如果监听的127,nginx必须要和php在同主机上,才能运行起来;如果php是在单独的服务器上安装的,那需要改监听的Ip及端口信息;还是在本文件中进行修改:

进程管理优化;如果只重启LNMP的平台,需要先重启nginx后再重启fpm;比较繁琐。

vim /etc/init.d/nginx 在这个配置文件中加入fpm的参数:

重载system进程后生效:

systemctl daemon-reload

再写nginx的主页文件:

先创建站点目录;再写一个静态的测试文件;

再创建一个动态文件:

vim test1.php

        

因为把站点目录创建到了/var/www/html下,要在nginx的主配置文件中修改路径:

vim /usr/local/nginx/conf/nginx.conf

重启nginx服务后生效,

由此可见,目录nginx解析不了动态网页,还没有把解析请求给fpm这个进程!

看到这里可以在yum安装的LAMP的环境下是否可以运行:

cd 到服务器的站点目录创建一个测试文件:

然后回到服务器端,进入nginx主配置文件,先使用第一种方式进行解析,让另外一个服务器帮我解析,这样以来就衍生出了LNAMP的架构,服务器1进行静态网页解析,而服务器2进行动态网页解析,由此可见,服务器1就成了代理的角色(反向代理)

然后再进入nginx主配置文件进行第二种方式的使用:

先将之前的代理语句注释掉,然后把文件自带的模版语句的注释去掉;

然后重启服务,再用浏览器进行测试:

然后再写mysql的测试脚本:

由此所得;搭建LNMP的时候需要指定php-fpm的进程安装;

2.Nginx 的运行控制

(1)检查配置文件

与 Apache 的主程序 httpd 类似,Nginx 的主程序也提供了“-t”选项用来对配置文件进行检查,以便找出不当或错误的配置。配置文件 nginx.conf 默认位于安装目录下的 conf/子目录中。若要检查位于其他位置的配置文件,可使用“-c”选项来指定路径。

(2)启动、停止 Nginx

直接运行 Nginx 即可启动 Nginx 服务器,这种方式将使用默认的配置文件,若要改用其他配置文件,需添加“-c 配置文件路径”选项来指定路径。需要注意的是,若服务器中已装有 httpd 等其他 Web 服务软件,应采取措施(修改端口、停用或卸载)避免冲突。通过检查 Nginx 程序的监听状态,或者在浏览器中访问此 Web 服务(默认页面将显示“Welcome to nginx!”),可以确认 Nginx 服务是否正常运行。

主程序 Nginx 支持标准的进程信号,通过 kill 或 killall 命令发送 HUP 信号表示重载配置,QUIT 信号表示退出进程,KILL 信号表示杀死进程。例若使用 killall命令,重载配置、停止服务的操作分别如下所示(通过“-s”选项指定信号种类)。当 Nginx 进程运行时,PID 号默认存放在 logs/目录下的 nginx.pid文件中,因此若改用kill 命令,也可以根据 nginx.pid 文件中的 PID 号来进行控制。

(3)添加 Nginx 系统服务

为了使 Nginx 服务的启动、停止、重载等操作更加方便,可以编写 Nginx 服务脚本,并使用 chkconfig 和 systemctl 工具来进行管理,也更加符合CentOS7.3系统的管理习惯。这样一来,就可以 systemctl 命令来启动、停止、重启、重载 Nginx 服务器了,方法是在执行时添加相应的 start、stop、restart、reload参数。

二、配置文件 nginx.conf

在 Nginx 服务器的主配置文件/usr/local/nginx/conf/nginx.conf 中,包括全局配置、I/O事件配置和 HTTP 配置这三大块内容,配置语句的格式为“关键字 值; ”

(末尾以分号表示结束),以“#”开始的部分表示注释。

1、全局配置

由各种配置语句组成,不使用特定的界定标记。全局配置部分包括 Nginx 服务的运行用户、工作进程数、错误日志、PID 存放位置等基本设置。

下图配置中,worker_processes 表示工作进程的数量。如果服务器有多块CPU或者使用多核处理器,可以参考 CPU 核心总数来指定工作进程数。如果网站访问量需求并不大,一般设为 1 就够用了。其他三项配置均已有注释,表示采用默认设置,例如,Nginx 的运行用户实际是编译时指定的 nginx,若编译时未指定则默认为 nobody。

2.I/O 事件配置

使用“events { }” 界定标记,用来指定 Nginx 进程的 I/O 响应模型、每个进程的连接数等设置。对于 2.6 及以上版本的内核,建议使用 epoll 模型以提高性能;每个进程的连接数应根据实际需要来定,一般在 10000 以下(默认为 1024)。若工作进程数为 8,每个进程处理 4096 个连接,则允许 Nginx 正常提供服务的连接数已超过 3 万个(4096×8=32768),当然具体还要看服务器硬件、网络带宽等物理条件的性能表现。

3.HTTP 配置

使用“http { }”界定标记,包括访问日志、HTTP 端口、网页目录、默认字符集、连接保持,以及后面要讲到的虚拟 Web 主机、PHP 解析等一系列设置,其中大部分配置语句都包含在子界定标记“server { }”内。

下图配置中listen 语句允许同时限定 IP 地址,采用“IP 地址:端口”形式。root语句用来设置特定访问位置(如“location /”表示根目录)的网页文档路径,默认为 Nginx 安装目录下的 html/子目录根据需要可改为/var/www/html 等其他路径

三、访问状态统计

Nginx 内置了 HTTP_STUB_STATUS 状态统计模块,用来反馈当前的 Web 访问情况。配置编译参数时可添加--with-http_stub_status_module 来启用此模块支持,可以使用命令/usr/local/nginx/sbin/nginx -V 查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS 模块。

要使用Nginx的状态统计功能,除了启用内建模块以外,还需要修改 nginx.conf配置文件,指定访问位置并添加 stub_status 配置代码。

新的配置生效以后,在浏览器中访问 Nginx 服务器的/status 网站位置,可以看到当前的状态统计信息,如图 5.1 所示。其中,“Active connections”表示当前的活动连接数(4);而“server accepts handled requests”表示已经处理的连接信息,三个数字依次表示已处理的连接数(4)、成功的 TCP 握手次数(4)、已处理的请求数(3)。

四、Nginx 访问控制

1、基于授权的访问控制

Nginx 与 Apahce 一样,可以实现基于用户授权的访问控制,当客户端想要访问相应网站或者目录时,要求用户输入用户名和密码才能正常访问,配置步骤与 Apache 基本一致。概括为以下几个步骤。(1)生成用户密码认证文件。(2)修改主配置文件相对应目录,添加认证配置项。(3)重启服务,访问测试。

2、基于授权的访问控制步骤

(1)使用 htpasswd 生成用户认证文件,如果没有该命令,可使用 yum 安装httpd-tools软件包,用法与 Apache 认证时方式相同,如:htpasswd -c /usr/local/nginx/passwd.db test。在/usr/local/nginx/目录下生成了 passwd.db文件,用户名是 test,密码输入 2 次。在passwd.db 中生成用户和密码的密文。

(2)修改密码文件权限为 400,将所有者改为 nginx,设置 Nginx 的运行用户能够读取。

(3)修改主配置文件 nginx.conf,添加相应认证配置项。

(4)检测语法、重启服务。

(5)用浏览器访问网址,检验控制效果,如图 5.2 所示。需要输入用户名和密码进行访问,验证通过才能访问到页面。

3、基于客户端的访问控制

(1) 基于客户端的访问控制简介

基于客户端的访问控制是通过客户端 IP 地址,决定是否允许对页面访问。Nginx 基于客户端的访问控制要比 Apache 简单,规则如下:

- deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。

-- allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。

--- 规则从上往下执行,如匹配则停止,不再往下匹配。

4、基于客户端的访问控制步骤

(1)修改主配置文件 nginx.conf,添加相应配置项。

(2)重启服务器访问网址,页面已经访问不到

五、Nginx虚拟主机

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值