Nginx的搭建和优化

目录

一、Nginx的编译安装

1.1 Nginx的简介

1.1.1 概述

1.1.2 Nginx和Apache的区别

1.2 Nginx的编译安装

1.2.1 编译安装nginx服务的步骤(理论)

1.2.2 编译安装nginx服务的步骤(实操)

1.3 nginx服务的主配置文件vim

1.全局配置

2.I/O事件配置

3.HTTP配置

二、Nginx的核心配置指令

2.1 访问状态统计配置

2.1.1 访问状态统计配置的步骤(理论)

2.1.2 访问状态统计配置的步骤(实操)

2.2 基于授权的访问控制

2.2.1 基于授权的访问控制步骤(理论)

2.2.1 基于授权的访问控制步骤(实操)

2.3 基于客户端访问控制

2.3.1 基于客户端的访问控制步骤(理论)

2.3.2 基于客户端的访问控制步骤(实操)

2.4 基于域名的nginx虚拟主机

2.4.1 基于域名的nginx虚拟主机操作步骤(理论)

2.4.2 基于域名的nginx虚拟主机操作步骤(实操)

2.5 基于IP的nginx虚拟主机

2.5.1 基于IP的nginx虚拟主机操作步骤(理论)

2.5.2 基于IP的nginx虚拟主机操作步骤(实操)

2.6 基于端口的nginx虚拟主机

2.6.1 基于端口的nginx虚拟主机操作步骤(理论)

2.6.2 基于端口的nginx虚拟主机操作步骤(实操)


一、Nginx的编译安装

1.1 Nginx的简介

1.1.1 概述

Nginx(发音同"engine x")是一个高性能的反向代理和 Web服务器软件,最初是由俄罗斯人 Igor Sysoev开发的。Nginx 的第一个版本发布于2004年,其源代码基于双条款 BSD许可证发布,因其系统资源消耗低、运行稳定且具有高性能的并发处理能力等特性,Nginx 在互联网企业中得到广泛应用。Nginx 是互联网上最受欢迎的开源 Web 服务器之一,它不仅提供了用于开发和交付的一整套应用技术,还是应用交付领域的开源领导者。 Netcraft公司 2019年7月的统计数据表明,Nginx 为全球最繁忙网站中的25.42%提供了服务或代理,进一步扩大了其在主机域名领域的占有量,新增 5220 万个站点,总数达4.4亿个,市场占有率已经超过 Apache 4.89%。得益于近几年云计算和微服务的快速发展,Nginx因在其中发挥了自身优势而得到广泛应用,且有望在未来占有更多的市场份额。

2019年 3月,著名硬件负载均衡厂商F5宣布收购 Nginx,Nginx成为F5的一部分。 F5表示,将加强对开源和 Nginx 应用平台的投资,致力于Nginx 开源技术、开发人员和社区的发展,更大的投资将为开放源码计划注人新的活力,会主办更多的开放源码活动,并产生更多的开放源码内容。

1.1.2 Nginx和Apache的区别

(1)nginx相对于apache的优点∶

轻量级,同样起web服务,比apache占用更少的内存及资源

抗并发,nginx处理请求是异步非阻塞的,而apache是阻塞型的在高并发下,nginx能保持低资源低消耗高性能

高度模块化的设计,编写模块相对简单

(2)apache相对于nginx的优点∶

Rewrite比nginx的rewrite强大 (rewrite的主要功能就是实现统一资源定位符URL的跳转)

模块多,基本想到的都可以找到

少bug, nginx的bug相对较多

超稳定

总结:一般来说,需要性能的web服务,用nginx。 若不需要性能只求稳定,就选用apache。

1.2 Nginx的编译安装

1.2.1 编译安装nginx服务的步骤(理论)

1.关闭防火墙,将安装nginx所需软件包传到/opt目录下

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

# 将压缩包传入到/opt目录下

nginx-1.12.0.tar.gz

2.安装依赖包

#nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些安装的开发包,以便提供相应的库和头文件。

yum install -y pcre-devel zlib-devel gcc gcc-c++ make

3.创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)

useradd -M -s /sbin/nologin nginx

4.编译安装nginx

cd /opt

tar zxvf nginx-1.12.0.tar.gz

./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的操作命令

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

6.添加nginx系统服务

方法一:使用脚本

vim /etc/init.d/nginx #创建脚本文件内容如下:

#!/bin/bash

#chkconfig: - 99 20

#description:Nginx Server Control Script

COM="/usr/local/nginx/sbin/nginx"

PID="/usr/local/nginx/logs/nginx.pid"

case "$1" in

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

方法二∶

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 start nginx.service

systemctl enable nginx.service

【Unit】∶服务的说明 Description∶ 描述服务 After∶依赖, 当依赖的服务启动之后再启动自定义的服务

【Service】服务运行参数的设置

Type=forking是后台运行的形式,使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程。

ExecStart为服务的具体运行命令 ExecReload为重启命令 ExecStop为停止命令

PrivateTmp=True表示给服务分配独立的临时空间 注意∶ 启动、重启、停止命令全部要求使用绝对路径

【Install】服务安装的相关设置,可设置为多用户

1.2.2 编译安装nginx服务的步骤(实操)

第一步:关闭防火墙,将安装nginx所需软件包传到/opt目录下

1)关闭防火墙

2)传入安装包到/opt目录下

第二步:安装依赖包

第三步:创建程序用户Nginx

第四步:编译安装Nginx

1)解压Nginx软件包

2)安装相关模块

3)编译安装

4)将Nginx链接到/user/local/sbin下

第五步:检查、启动、重启、停止nginx服务

1)检查和启动

2)关闭nginx服务

第六步:添加Nginx系统服务

1)创建脚本文件

2)赋予权限 并添加到系统服务内

3)nginx启动服务服务测试

第七步:浏览器访问测试

1.3 nginx服务的主配置文件vim

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

1.全局配置

#user nobody; #运行用户,若编译时未指定则默认为 nobody

worker_processes 1; #工作进程数量,可配置成服务器内核数 * 2,如果网站访问量不大,一般设为1就够用了

#error_log logs/error.log; #错误日志文件的位置

#pid logs/nginx.pid; #PID 文件的位置

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.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; ##支持文件发送(下载)

##此选项允许或禁止使用socket的TCP cORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用

#tcp_nopush on;

##连接保持超时时间,单位是秒

#keepalive_timeout 0;

keepalive_timeout 65;

#gzip on; ##gzip模块设置,设置是否开启gzip压缩输出

server {

listen 80; ##监听地址及端口

server_name www.clj.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.clj.com/test/1.jpg,会返回文件/usr/local/nginx/html/test/1.jpg

alias (别名配置)∶请求www.clj.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

二、Nginx的核心配置指令

2.1 访问状态统计配置

2.1.1 访问状态统计配置的步骤(理论)

1.先使用命令/usr/local/nginx/sbin/nginx -V查看已安装的 Nginx 是否包含HTTP_STUB STATUS模块

2.修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置(修改之前进行备份)

cd /usr/local/nginx/conf/

cp nginx.conf nginx.conf.bak

vim nginx.conf

server {

listen 80;

server_name www.clj.com;

charset utf-8;

#access_log logs/host.access.log main;

location / {

root html;

index index.html index.htm;

}

##添加 stub_status 配置

location /status { ##访问位置为/status

stub_status on; ##打开状态统计功能

access_log off; ##关闭此位置的日志记录

}

3.重启服务,访问测试

systemctl restart nginx.service

浏览器访问 http;//192.168.80.78/status

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

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

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

2.1.2 访问状态统计配置的步骤(实操)

第一步:使用命令/usr/local/nginx/sbin/nginx -V查看已安装的 Nginx 是否包含HTTP_STUB STATUS模块

第二步:修改主配置文件

第三步:重启服务后进行访问测试

2.2 基于授权的访问控制

2.2.1 基于授权的访问控制步骤(理论)

1.生成用户密码认证文件

yum install -y httpd-tools

htpasswd -c /usr/local/nginx/passwd.db zhangsan

chown nginx /usr/local/nginx/passwd.db

chmod 400 /usr/local/nginx/passwd.db

2.修改主配置文件相应的目录,添加认真配置

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

location / {

root html;

index index.html index.htm;

#添加认证配置

auth_basic "secret"; #设置密码提示框文字信息

auth_basic_user_file /usr/local/nginx/passwd.db;

}

3.重启服务,访问测试

nginx -t

systemctl restart nginx.service

浏览器访问 http∶//192.168.80.78

2.2.1 基于授权的访问控制步骤(实操)

第一步:生成用户密码认证文件

第二步:修改主配置文件相应的目录,添加认证配置

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

第三步:重启服务,访问测试

1)检查配置,然后重新nginx服务

2)浏览器中访问测试

2.3 基于客户端访问控制

2.3.1 基于客户端的访问控制步骤(理论)

访问控制规则如下:

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

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

规则从上往下执行,如果匹配到则停止,不会再往下继续匹配。

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

location / {

root html;

index index.html index.htm;

auth_basic "secret";

auth_basic_user_file /usr/local/nginx/passwd.db;

# 添加控制规则

deny 192.168.153.20; #拒绝访问的客户端IP

allow all; #允许其他所有客户端访问

}

systemctl restart nginx.service

2.3.2 基于客户端的访问控制步骤(实操)

第一步:在主配置文件添加控制规则

第二步:重启服务,然后访问测试

1)重启nginx服务

2)使用被拒绝的客户端进行访问测试:被拒绝访问

3)使用其他客户端进行访问测试:可以正常访问 (需要输入密码就可以)

2.4 基于域名的nginx虚拟主机

2.4.1 基于域名的nginx虚拟主机操作步骤(理论)

1.为虚拟主机提供域名和IP的映射

echo "192.168.153.30 www.nj.com www.kgc.com" >> /etc/hosts

2.为虚拟主机准备网页文档

mkdir -p /var/www/html/nj/

mkdir -p /var/www/html/kgc/

echo "<h1>www.nj.com</h1>" > /var/www/html/nj/index.html

echo "<h1>www.kgc.com</h1>" > /var/www/html/kgc/index.html

3.修改nginx主配置文件

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

server {

listen 80;

server_name www.bxb.com; #设置域名

charset utf-8; #设置网页字符集

access_log logs/bxb.com.access.log; #设置日志名

location / {

root /var/www/html/bxb; #设置www.bxb.com的工作目录

index index.html index.htm;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

server {

listen 80;

server_name www.clj.com; #设置域名

charset utf-8; #设置网页字符集

access_log logs/clj.com.access.log; #设置日志名

location / {

root /var/www/html/clj; #设置www.bxb.com的工作目录

index index.html index.htm;

}

4.重启nginx后进行访问测试

systemctl restart nginx.service

浏览器访问http://www.clj.com

浏览器访问http://www.bxb.com

2.4.2 基于域名的nginx虚拟主机操作步骤(实操)

第一步:为虚拟主机提供域名和IP的映射(也可以做DNS域名解析)

第二步:为虚拟主机准备网页文档

第三步:修改主配置文件

1)还原只配置文件(之前做过访问控制,所以我这边直接将备份的配置进行还原了)

2)修改主配置文件如下:

 

3)重新启动nginx后进行访问测试

2.5 基于IP的nginx虚拟主机

2.5.1 基于IP的nginx虚拟主机操作步骤(理论)

1.添加虚拟网卡,修改主配置文件

ifconfig ens33:1 192.168.153.40/24

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

server {

listen 192.168.80.78:80; #修改监听的为ip

server_name www.bxb.com;

charset utf-8;

access_log logs/bxb.com.access.log;

location / {

root /var/www/html/bxb;

index index.html index.htm;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

server {

listen 192.168.80.88:80; #修改监听的为ip

server_name www.clj.com;

charset utf-8;

access_log logs/clj.com.access.log;

location / {

root /var/www/html/clj;

index index.html index.htm;

}

2.检查配置文件,重启服务

nginx -t

systemctl restart nginx.service

3.客户端上访问测试

浏览器访问http://192.168.153.30

浏览器访问http://192.168.153.40

2.5.2 基于IP的nginx虚拟主机操作步骤(实操)

第一步:添加虚拟网卡,然后修改主配置文件

 

第二步:检查配置文件是否有错后重新nginx服务

第三步:在客户端上进行访问测试

2.6 基于端口的nginx虚拟主机

2.6.1 基于端口的nginx虚拟主机操作步骤(理论)

1.修改主配置文件

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

server {

listen 192.168.80.78:666; #修改监听的为ip的666端口

server_name www.bxb.com;

charset utf-8;

access_log logs/bxb.com.access.log;

location / {

root /var/www/html/bxb;

index index.html index.htm;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

server {

listen 192.168.80.88:888; #修改监听的为ip的888端口

server_name www.clj.com;

charset utf-8;

access_log logs/clj.com.access.log;

location / {

root /var/www/html/clj;

index index.html index.htm;

}

2.检查配置文件,重启服务

nginx -t

systemctl restart nginx.service

3.客户端上访问测试

浏览器访问http://192.168.153:30:666

浏览器访问http://192.168.153:30:888

2.6.2 基于端口的nginx虚拟主机操作步骤(实操)

第一步:修改主配置文件

第二步:检查配置文件是否有错后重新nginx服务

第三步:在客户端上进行访问测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值