Nginx网站服务

一、Nginx基础

Nginx专为性能优化而开发,最知名的优点为:稳定、资源消耗低和对HTTP并发连接的高处理能力。

1.1 Nginx安装及运行控制

1.1.1 Nginx安装

以Nginx1.12版本为例,使用源代码包(可从官方网站http://www.nginx.org下载的形式下载

安装过程中的pcre-devel和zlib-devel分别是提供基于perl语言的正则表达式和压缩作用。

1.1.2 Nginx的运行控制

因为前面创建了一个连接,所以可以在任何环境中使用nginx,直接使用就是启动nginx。结合"-t"选项是对主配置文件验证,"-c"选项则可以指定其他配置文件的路径进行验证。

若要终止nginx的运行,可以使用pkill命令终止nginx。也可以编写Nginx服务脚本,这样就能够使用chkconfig和systemctl工具管理了。通过在"/etc/init.d/"中创建名为nginx的脚本,写入以下内容:

①指定解释器

②第一项指定nginx进程的运行级别(即选择运行在单用户模式、多用户模式、图形化模式等),全部为"-",多个级别之间没有间隔。第二项指定开机自启的优先级,越大优先级越高,普通进程最高99。第三项指定关闭优先级,越小关闭的时间靠后。

③写描述,此项可以自定义。

④通过控制语句,如if、case,判断输入的参数(参数一般为start、reload、restart、stop),并进行响应的处理,这些处理需要使用nginx命令和pkill命令(用于终止nginx)。

在脚本编辑成功之后,加上运行权限,使用"chkconfig --add nginx"将nginx添加为系统服务,就可以使用chkconfig和systemctl进行管理了。

1.2 Nginx的主配置文件

主配置文件位于其安装目录的conf目录中,名为"nginx.conf",包括全局配置、I/O事件配置和HTTP配置这三大块内容,配置语句的格式为:"关键字 值;"。

1.2.1 全局配置

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

1.2.2 I/O事件配置

使用"events {}"界定标记,可以设置Nginx进程的I/O响应模型、每个进程的连接数等设置。进程的连接数与工作进程数有关联,关系为:工作进程数×进程的连接数=nginx提供服务的连接数。

1.2.3 HTTP设置

使用"http {}"界定标记,可以设置访问日志、HTTP端口、网页目录、默认字符集、连接保持、虚拟主机、PHP解析等,其中大部分配置语句都包含在子定界标记"server {}"内。

log_format main项可以设置访问日志的格式

listen指定不同站点各自监听的端口

root指定网页文件所在目录

charset可以设置默认字符集

keepalive_timeout设置连接保持时间

server {}设置虚拟主机,也叫站点、网站

location ~\.php {} 可以设置php解析相关配置

1.3 访问状态统计

Nginx内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的Web访问情况。需要在配置时添加该模块,还需要修改nginx.conf配置文件,指定访问位置并添加stub_status配置代码。例如:

可以在浏览器中进行验证,使用IP地址进行访问并在后面指定"/status" 。

二、Nginx访问控制

与Apache一样,有基于用户授权文件、IP的访问控制。

2.1 基于授权的访问控制

当客户端要访问网页时,需要输入账号和密码才能继续访问,主要为以下几个步骤:

  • 生成用户密码认证文件。

    • 使用命令htpasswd生成用户认证文件(该命令可安装httpd-tools获取)。
    • htpasswd -c nginx安装路径/文件名.db 用户名 #新建授权文件并添加用户
    • htpasswd nginx安装路径/文件名.db 用户名 #在已有授权文件中添加用户
    • 建议修改文件权限为400,且属主改为nginx。
  • 修改主配置文件相对应记录,添加认证配置项。

    • 在对应的站点的location中添加以下字段
      • auth_basic "secret";#指定验证方法为密码
      • auth_basic_user_file 用户授权文件位置;
  • 重启服务,访问测试。

2.2 基于IP的访问控制

nginx基于客户端的访问控制规则如下:

  • deny IP/IP段:拒绝某个IP或网段的客户端访问。
  • allow IP/IP段:允许某个IP或网段的客户端访问。
  • 规则从上到下执行,如匹配则停止。

只需在站点的location中添加上述格式的规则语句,重启服务后即可生效。

三、Nginx虚拟主机

Nginx和Apache一样,都可以在一台主机中托管多个站点。这些站点可以基于IP、域名、端口进行区分。

3.1 基于域名的虚拟主机

只需在主配置文件的对应域名站点中的location中指定网页文件所在的位置,并且确保nginx能够找到这个位置。

注意开始是没有fkk这个目录的,需要自己创建,并在里面添加网页文件,不同的站点不能使用相同的目录。可以根据自己需求创建多个"server {}"站点。

3.2 基于IP的虚拟主机

这种方式的站点数量会受主机拥有的IP地址数量的限制,因为一个IP对应一个站点。只需在站点中的listen项中添加IP地址即可,端口号可以保留或删除。

3.3 基于端口的虚拟主机

在实验环境中访问时,也使用"IP:端口"方式。

四、LNMP架构部署及应用

4.1 安装MySQL服务

一般建议以源码包安装,本次用MySQL的5.6.36版本。先解压源码包并进入已解压后的目录中,使用cmake工具进行配置,以上步骤成功之后进行安装。

在配置过程中,将默认使用的字符集设置为utf8,并添加其他字符集的支持(需要先安装cmake,可使用yum安装)。

上述的配置命令中,各选项的含义如下:

  • -DCMAKE_INSTALL_PREFIX:指定将mysql数据库程序安装到某目录下。
  • -DSYSCONFDIR:指定初始化参数文件目录
  • -DEFAULT_CHARSET:指定默认使用的字符集编码。
  • -DEFAULT-COLLATION:指定默认使用的字符集校对规则,utf8_general_ci是适用于UTF-8字符集的通用规则。
  • -DWITH_EXTRA_CHARSETS:指定额外支持的其他字符集编码。

为了加强数据库服务的权限控制,需要使用专门的运行用户。此用户不需要登录,不需要家目录:

useradd -M -s /sbin/nologin mysql -g mysql

#使用此用户对数据库进行初始化

mysql的安装路径/scripts/mysql_install_db --basedir=mysql的安装路径 datadir=mysql的安装路径/data --user=mysql

以上所有步骤都完成之后就可以启动mysql了,此时的mysql没有root密码,建议进行设置。

4.2 安装PHP解析环境

若要让Nginx能够解析PHP网页,有两种方法:

  • 将访问PHP页面的WEB请求交给其他服务器(LAMP)去处理。
  • 使用PHP的FPM模块调用本机的PHP环境。

此次以FPM模块进行处理。大致步骤为:编辑php-fpm.conf文件,修改其中的PID文件、运行用户/组(需要创建一个php用户,不能登录)、服务数(进程数量)等相关设置,之后启动php-fpm程序即可。

在php的安装路径/etc/php-fpm.conf文件中找到以下字符:

  • pid:此字符用于确认pid文件的位置,去掉注释
  • user:运行用户
  • group:运行组
  • pm.max_children:
  • pm.start_servers
  • pm.min_spare_servers:最少空闲进程数
  • pm.max_spare_servers:最多空闲进程数

建议在nginx的服务脚本中添加与nginx相同结构的php-fpm的控制语句(php-fpm也可以直接执行php-fpm指令启动),以便在启动/停止Nginx服务器时将php-fpm进程也自动停止。

无论是将PHP页面交给LAMP服务去解析,还是调用本机的php-fpm进程进行解析,都需要在""server{}"配置段中添加location设置,以便指定当访问.php页面时采取何种操作。

调用本机的php-fpm进程进行解析,使用的配置语句如下所示:

之后重启nginx服务即可生效。最后可以创建一个测试页面,位置在基于上面图片中的root项,用来测试PHP语句能否正常解析,以及能否连接数据库。

<?php

$link=mysqli_connect('127.0.0.1','root','数据库密码');

if($link) echo "OK"; #如果数据库连接成功则显示OK

mysqli_close($link); #关闭数据库连接。

?>

相关推荐
我们的五年26 分钟前
【Linux课程学习】:《简易版shell实现和原理》 《哪些命令可以让子进程执行,哪些命令让shell执行(内键命令)?为什么?》
linux·运维·服务器·学习
康熙38bdc1 小时前
Linux 线程互斥
linux·运维·开发语言
Wthzdq1 小时前
正则表达式(二)
linux·运维·服务器
逆风水手1 小时前
Python3交叉编译arm-linux放入设备中运行方式
linux·运维·arm开发
学习编程之路1 小时前
【Linux】软件包管理与vim工具使用详解
linux·运维·服务器·科技
PasteSpider1 小时前
新版本PasteSpider开发中专用部署工具介绍(让2GB的服务器也能使用CI/CD,简化你的部署过程)
运维·服务器·crud·pastetemplate
是老余2 小时前
Linux的介绍及虚拟机centOS系统的下载与应用
linux·运维·centos
Linux运维技术栈2 小时前
自动化运维(k8s)之微服务信息自动抓取:namespaceName、deploymentName等全解析
运维·kubernetes·自动化
小安运维日记2 小时前
CKA认证 | Day4 K8s管理应用生命周期(下)
linux·运维·云原生·容器·kubernetes·云计算
比花花解语2 小时前
在CentOS系统中安装工具包的时候报错的解决方法
linux·运维·centos