目录

一、Nginx简介

1.1 概述

1.Nginx是一款高性能、轻量级Web服务软件

2.稳定性高

3.系统资源消耗低

4.对HTTP并发连接的处理能力高,单台物理服务器可支持30000-50000个并发请求

1.2 Nginx与Apache的差异

Nginx Apache
基于事件 基于流程
所有请求由一个线程处理 单个线程处理单个请求
避免子进程 基于子进程
在内存消耗和连接方面更好 一般
性能和可伸缩性不依赖于硬件 依赖于CPU和内存等硬件
支持热部署 不支持热部署
对于静态文件处理更具效率 一般
在反向代理场景更具优势 一般

二、编译安装Nginx服务

2.1 将nginx软件包传到主机/opt目录下

2.2、安装依赖包

yum install -y pcre-devel zlib-devel gcc gcc-c++ make    #Nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些安装的开发包,以便提供相应的库和头文件

2.3、添加模块编译安装

cd /opt
tar zxvf nginx-1.12.0.tar.gz cd nginx-1.12.0/
./configure \
> --prefix=/usr/local/nginx \ #指定nginx的安装路径
> --user=nginx \ #指定用户名
> --group=nginx \ #指定组名
> --with-http_stub_status_module #启用 http_stub_status_module模块以便持状态线计 make && make install ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作命令

2.4、创建运行用户、组

useradd -M -s /sbin/nologin nginx       #Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限

2.5、检查、启动、重启、停止nginx服务

nginx -t                #检查配置文件是否配置正确

nginx                   #启动

停止
cat /usr/local/nginx/logs/nginx.pid #先查看nginx的PID号
kill -3 <PID号>
kill -s QUIT <PID号>
killall -3 nginx
killall -s QUIT nginx 重载
kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx 日志分割,重新打开日志文件
kill -USR1 <PID号> 平滑升级
kill -USR2 <PID号> 新版本升级
tar -zxvf nginx-1.xx.xX. tar.gz
cd nginx-1.xx. xx
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
cp objs/nginx /usr/local/nginx/sbin/nginx
make upgrade #或者先 killall nginx ,再/usr/local/nginx/sbin/nginx

2.6、添加nginx系统服务

方法一使用shell脚本

vim /etc/init.d/nginx           #系统服务文件下创建脚本

#!/bin/bash
#chkconfig: 35 99 20 #指定35级别开机自启动 第99个开启 第20个关闭
#description:Nginx Server Control Script
COM="/usr/local/nginx/sbin/nginx" #指定命令路径
PID="/usr/local/nginx/logs/nginx.pid" #指定pid文件
case "$1" in #case语句编写
start)
$COM
;;
stop)
kill -s QUIT $(cat $PID)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PID)
;;
*)
echo "Usage:$0 {start|stop|restart|reload}"
exit 1
esac
exit 0 chmod +x /etc/init.d/nginx
chkconfig --add nginx
systemctl daemon-reload #磁盘上的ngin服务更改,运行systemctl daemon-reload重新加载单元
systemctl start nginx
systemctl stop nginx

方法二:编写nginx系统服务文件

vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP SMAINPID
ExecrStop=/bin/kill-s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target chmod 754 /lib/systemd/ system/nginx.service
systemctl daemon-reload
systemctl start nginx.service
systemctl enable nginx.service

注:
1.【Unit】∶服务的说明 Description∶ 描述服务 After∶依赖, 当依赖的服务启动之后再启动自定义的服务
2.【Service】:服务运行参数的设置
Type=forking是后台运行的形式,使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程
ExecStart为服务的具体运行命令 ExecReload为重启命令 ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间 注意∶ 启动、重启、停止命令全部要求使用绝对路径
【Install】:服务安装的相关设置,可设置为多用户

2.7、测试nginx

三、nginx服务的主配置文件

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

3.1、全局配置

user nobody                 #运行用户,若编译时未指定则默认为nobody
worker_processes 1 #工作进程数量,可配置成服务器内核数 * 2,如果网站访问量不大,一般设为1就够用了
error_log logs/error.log #错误日志文件的位置
pid logs/nginx.pid #PID文件的位置

3.2、I/O事件配置

events {
use epoll #使用epoll模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
worker_connections 4096 #每个进程处理 4096个连接
}

如提高每个进程的连接数还需执行"ulimit -n 65535"命令临时修改本地每个进程可以同时打开的最大文件数

在Linux平台上, 在进行高并发TCP连接处理时, 最高的并发数量都要受到系统对用户 单—一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)

可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制

3.3、HTTP配置

http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型
日志格式设定
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
#'$status $body_bytes_sent "$http_referer" '
#'"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; #日志格式设定 sendfile on; #支持文件发送(下载)
#tcp_nopush on; #此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用
#keepalive_timeout 0;
#keepalive_timeout 65; #连接保持超时时间,单位是秒
#gzip on; #gzip模块设置,设置是否开启gzip压缩输出
server {
listen 80; #监听地址及端口
server_name www.gxd.com; #站点域名,可以有多个,用空格隔开
charset utf-8; #网页的默认字符集
access_log logs/host.access.log main;
location / { #根目录配置
root html; #网站根目录的位置/usr/local/nginx/html
index index.html index.htm; #默认首页文件名
}
#error_page 404 /404.html;
#redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; #内部错误的反馈页面
location = /50x.html { #错误页面配置
root html;
} 日志格式设定∶
$remote_addr与$http x forwarded for用以记录客户端的ip地址;
$remote user∶ 用来记录客户端用户名称;
$time local∶ 用来记录访问时间与时区;$request∶用来记录请求的url与http协议;
$status∶ 用来记录请求状态;成功是200,
$body bytes sent ∶ 记录发送给客户端文件主体内容大小;
$http referer∶ 用来记录从哪个页面链接访问过来的;
$http user agent∶记录客户浏览器的相关信息; 通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过Sremote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。 location常见配置指令, root、alias、proxy_ pass
root (根路径配置)∶ 请求ww.123.com/test/1.jpg,会返回文件/usr/local/nginx/html/test/1.jpg
alias (别名配置)∶请求www.123.com/test/1.jpg,会返回文件/usr/local/nginx/html/1.jpg
proxy_pass (反向代理配置)∶
proxy_pass http://127.0.0.1:8080/; ------------- 会转发请求到http∶//127.0.0.1∶8080/1.jpg
proxy_pass http://127.0.0.1:8080; --------------会转发请求到http∶//127.0.0.1∶8080/test/1.jpg

四、访问状态统计配置

4.1、操作步骤

①检查是否安装STUB_STATUS模块

nginx -V

②修改nginx.conf配置文件,指定访问位置并添加stub_status配置

cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.bak
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
server {
listen 80;
server_name www.gxd.com;
charset utf-8;
location / {
root html;
index index.html index.php;
}
##添加 stub_status 配置##
location /status { #访问位置为/status
stub_status on; #打开状态统计功能
access_log off; #关闭此位置的日志记录
}
}
}
systemctl restart nginx.service #重启服务

③浏览器验证

http://192.168.80.12/status

1.Active connections ∶ 表示当前的活动连接数

2.server accepts handled requests∶表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的TCP握手次数已处理的请求数

3.可curl -s http∶//192.168.80.12/status 结合 awk与if 语句进行性能监控

五、基于授权的访问控制

5.1、生成用户密码认证文件

yum -y install httpd-tools
htpasswd -c /usr/local/nginx/passwd.db gxd
chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db

5.2、修改主配置文件相应的目录,添加认证配置

vim /usr/local/nginx/conf/nginx.conf
......
server {
location / {
......
##添加认证配置##
auth_basic "secret";
auth_basic_user_file /usr/local/ngin/passwd.db;
}
} nginx -t #验证配置
systemctl restart nginx #重启服务

5.3、客户机测试

六、基于客户端访问控制

6.1、配置要求

访问控制规则如下:
deny IP/IP段:拒绝某个IP或IP段的客户端访问 #黑名单
allow IP/IP段:允许某个IP或IP段的客户端访问 #白名单
规则从上往下执行,如果匹配到则停止,不会再往下继续匹配 vim /usr/local/nginx/conf/nginx.conf
......
server {
location / {
......
##添加控制规则##
deny 192.168.80.12; #拒绝访问的客户端 IP
allow all; #允许其它IP客户端访问
}
} systemctl restart nginx

6.2、客户机测试

七、构建Nginx虚拟web主机

7.1、 基于域名的虚拟主机

①为虚拟主机提供域名解析

第一种:部署DNS域名解析服务器
第二种:临时添加
echo "192.168.80.12 www.aaa.com www.bbb.com" >> /etc/hosts

②为虚拟主机准备网页文档

mkdir -p /var/www/html/aaa
mkdir -p /var/www/html/bbb echo "<h1>aaaaaaa</h1>" > /var/www/html/aaa/index.html
echo "<h1>bbbbbbb</h1>" > /var/www/html/bbb/index.html

③添加虚拟主机配置

vim /usr/local/nginx/conf/nginx.conf
......
http {
......
server {
listen 80;
server_name www.aaa.com; #设置域名www.aaa.com
charset utf-8;
access_log logs/www.aaa.access.log;
location / {
root /var/www/html/aaa; #设置www.aaa.com 的工作目录
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
} server {
listen 80;
server_name www.bbb.com; #设置域名www.bbb.com
charset utf-8;
access_log logs/www.bbb.access.log;
location / {
root /var/www/html/bbb; #设置www.bbb.com 的工作目录
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}

④验证配置并重启服务

nginx -t
systemctl restart nginx

⑤客户机测试

7.2、基于IP地址的虚拟主机

①添加一张虚拟网卡

ifconfig ens33:0 192.168.80.100/24   #这边添加虚拟网卡

②修改配置文件

步骤和前面类似

③验证配置并重启服务

nginx -t
systemctl restart nginx

④客户机测试

7.3、基于端口的虚拟主机

①修改配置文件

步骤一样,只是改变端口号

②验证配置并重启服务

nginx -t
systemctl restart nginx

③客户机测试

Nginx搭建与相关配置的更多相关文章

  1. Linux centos VMware Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

    一.Nginx防盗链 配置如下,可以和上面的配置结合起来 location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|x ...

  2. nginx uwsgi flask相关配置

    一.安装Nginx 在 /home/download下下载压缩包 wget https://nginx.org/download/nginx-1.12.2.tar.gz 解压缩 tar zxvf ng ...

  3. nginx搭建分布式简单配置

    1.下载安装nginx 2.编辑nginx.conf文件 upstream 172.100.10.52 { ip_hash; #保证每一个用户访问同一个网站 server 172.100.10.21: ...

  4. hdfs的HA集群搭建的相关配置

    前期准备就不详细说了 .修改Linux主机名 .修改IP .修改主机名和IP的映射关系 ######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机.阿里云主机等) /etc/ ...

  5. Nginx防盗链 Nginx访问控制 Nginx解析php相关配置 Nginx代理

     

  6. Nginx防盗链、访问控制、解析PHP相关配置及Nginx代理

    6月11日任务 12.13 Nginx防盗链12.14 Nginx访问控制12.15 Nginx解析php相关配置12.16 Nginx代理 扩展502问题汇总 http://ask.apelearn ...

  7. Nginx+keepalived高可用配置实战(内附彩蛋)

    1.整体架构图如下 2.环境准备 今天所配置的是keepalived+nginx 的负载均衡 下载keepalived软件 [root@LB01 tools]# wget http://www.kee ...

  8. zookeeper集群的搭建以及hadoop ha的相关配置

    1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...

  9. 搭建rtmp直播流服务之1:使用nginx搭建rtmp直播流服务器(nginx-rtmp模块的安装以及rtmp直播流配置)

    欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) 一.方案简要 首先通过对开发方案的仔细研究(实时监控.流媒体.直播流方案的数据源-->协议转换-->服务器--&g ...

随机推荐

  1. .NET Core 对象池的使用

    昨天在『.NET 大牛之路』技术群和大家聊到了对象池的话题,今天展开详细讲讲这个知识点. 池这个概念大家都很熟悉,比如我们经常听到数据库连接池和线程池.它是一种基于使用预先分配资源集合的性能优化思想. ...

  2. Spring Boot中文文档(官方文档翻译 基于1.5.2.RELEASE)

    作者:Phillip Webb, Dave Syer, Josh Long, Stéphane Nicoll, Rob Winch, Andy Wilkinson, Marcel Overdijk, ...

  3. 最常见的安全漏洞– Acunetix Web应用程序漏洞报告2021

    每年,Acunetix都会为您提供最常见的Web安全漏洞和网络外围漏洞的分析.我们的年度Web应用程序漏洞报告(现已成为Invicti AppSec指标的一部分)是基于从Acunetix在线获得的真实 ...

  4. WPF教程十五:数据模板的使用(重发)

    数据模板 数据模板是一段如何显示绑定在VM对象的XAML代码.数据模板可以包含任意元素的组合,基于Binding来显示不同的信息. 在实际的开发中数据模板的应用场景很多,同样一个控件可以根据不同的绑定 ...

  5. 《快来为你的 .NET 应用加个监控吧!》更新版本啦

    目录 导读 三种方式处理监控数据 主动推送 ASP.NET Core 自定义URL .NET diagnostics 自定义监控指标 导读 CZGL.ProcessMetrics 是一个 Metric ...

  6. python 01篇

    一.Pycharm 使用小tips 1.1 pycharm创建项目时,选择Python环境,不使用默认的虚拟环境 1.2 如何在pycharm中查看python版本 路径:File-Settings- ...

  7. DHCP原理于配置

    DHCP原理于配置                      一.DHCP服务                       1)使用DHCP的好处                       2)DH ...

  8. python删除文件中某一行

    将文本中的 tasting123删除 with open("fileread.txt","r",encoding="utf-8") as f ...

  9. SLAM的数学基础(2):协方差和协方差矩阵

    之前我们知道,方差是一组数据的离散程度,它的公式为: 那么如果我们有几组数据,需要知道这几组数据的协同性呢? 举个例子,还是在小红,几次考试成绩如下: 入学考试:数学:80,语文:80 期中考试:数学 ...

  10. 单细胞分析实录(19): 基于CellPhoneDB的细胞通讯分析及可视化 (下篇)

    在上一篇帖子中,我介绍了CellPhoneDB的原理.实际操作,以及一些值得注意的地方.这一篇继续细胞通讯分析的可视化. 公众号后台回复20210723获取本次演示的测试数据,以及主要的可视化代码. ...