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); #关闭数据库连接。

?>

相关推荐
林间码客2 小时前
从DevOps到DevSecOps:构建现代软件交付的基石与护城河
大数据·运维·devsecops·devops
Lust Dusk3 小时前
记一次Linux应急响应题目解析
linux·运维·服务器·网络·安全·网络安全
轻揉小乔 真新人5 小时前
使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制
运维·nginx·缓存
Yan_chen6665 小时前
SSH(Secure Shell)安全外壳协议详解
运维·网络协议·ssh
lingran__6 小时前
Linux 基础常用指令万字详解(上)|文件目录命令,结合底层原理剖析
linux·运维·服务器·后端·centos·linux基础指令
各类产品分享7 小时前
电力行业AR智能运维哪个品牌好
运维·ar·ar巡检
贾天佑忆月 迷失的昵7 小时前
客户端与服务器持续同步解析(轮询,comet,WebSocket)
运维·服务器·websocket
刘某的Cloud7 小时前
Galera Cluster mariadb 生产环境常见问题排查与运维指南
linux·运维·数据库·mariadb·集群高可用
70asunflower7 小时前
Linux 性能排查分析完全教程
linux·运维
zhangfeng11338 小时前
宝塔8 升级到 11导致 服务器无法访问外网dns失效了,无法访问bt.cn 解决方法 测试通过
运维·服务器