Nginx

Nginx概述:

Nginx是一个开源且高性能,可靠的HTTP,WEB,反向代理服务。

开源:直接获取源代码

高性能:支持海量高并发

可靠:服务稳定

Nginx安装:

1)利用yum方式安装软件程序
① 基于官方源安装 
第一个步骤:更新yum源文件
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

第二个步骤:下载安装软件
yum install -y nginx

② 非官方源安装 阿里源 清华源
yum install -y nginx

2)利用编译方式安装软件程序
第一个里程:解决软件依赖关系
yum install -y openssl-devel pcre-devel
openssl-devel : 主要是系统环境支持HTTPS访问
pcre-devel : 用于兼容prel正则信息

第二个里程:创建程序管理用户
master进程:软件服务主进程 维持服务运行状态 
worker进程:软件服务工作进程 处理用户访问请求 
useradd -M -s /sbin/nologin www

第三个里程:下载软件包进行编译安装
cd /server/tools
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar xf nginx-1.18.0.tar.gz
cd nginx-1.18.0

编译过程:三部曲
配置过程:./configure --prefix=/application/nginx/ --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
--prefix=PATH set installation prefix
设置安装程序路径
--user=USER set non-privileged user for worker processes
设置worker进程管理用户
--group=GROUP set non-privileged group for worker processes
设置worker进程管理用户组
--with-http_ssl_module enable ngx_http_ssl_module
开启https功能
--with-http_stub_status_module enable ngx_http_stub_status_module
开启网站服务监控页面功能

编译过程:让系统识别一下程序代码信息 nginx是用c语言编写
make

安装过程:
make install

启动并设置开机自启

systemctl start nginx

systemctl enable nginx

 

验证是否启动成功

1端口检测

netstat -lntup|grep 80

 

 

 

2检测进程

ps -ef|grep nginx

 

 

 

 

3浏览器检测

 

 

 

 

4检测nginx版本

[root@web01 ~ 01:29:27]]# nginx -v
nginx version: nginx/1.18.0

5检测nginx编译参数

[root@web01 ~ 01:32:57]]# nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/application/nginx-1.18.0 --with-http_stub_status_module --with-http_ssl_module

 

nginx启停

1启动

[root@web01 ~ 01:33:00]]# systemctl start nginx

[root@web01 ~ 01:35:58]]# /usr/sbin/nginx

2停止

[root@web01 ~ 01:36:02]]# /usr/sbin/nginx -s stop

[root@web01 ~ 01:36:50]]# systemctl stop nginx

3重载

[root@web01 ~ 01:36:53]]# systemctl reload nginx

[root@web01 ~ 01:38:53]]# /usr/sbin/nginx -s reload

4重启

[root@web01 ~ 01:38:56]]# systemctl restart nginx

 

nginx软件目录结构
/etc/nginx/ --- 配置文件保存目录信息
nginx.conf --- nginx程序主配置文件 配置错误会影响服务运行

/etc/nginx/conf.d --- 配置文件保存扩展目录
xxxx.conf --- 具体每一网站信息   www.conf bbs.conf blog.conf

/usr/sbin/nginx --- 主要用于管理服务运行状态命令
-v : show version and exit
显示版本信息
-V : show version and configure options then exit
显示版本信息和配置参数信息
-t : test configuration and exit ******
检查配置文件语法信息
-T : test configuration, dump it and exit
检查语法配置信息,将所有配置信息进行输出
-q : suppress non-error messages during configuration testing
抑制某些错误信息输出,在进行配置测试时
-s signal : send signal to a master process: stop, quit, reopen, reload
识别信号信息 stop 停止服务/reload 平滑重启 nginx 命令 启动
-p prefix : set prefix path (default: /etc/nginx/)
加载默认nginx目录
-c filename : set configuration file (default: /etc/nginx/nginx.conf)
加载默认nginx配置文件
-g directives : set global directives out of configuration file
加载配置全局功能指令

/usr/share/nginx/html/ --- 存储网站数据资源信息目录 站点目录

/var/cache/nginx --- 保存缓存数据信息

/var/log/nginx --- 保存程序日志文件 
access.log --- 用户访问网站情况日志文件
error.log --- 错误日志保存文件

 

网站配置文件参数介绍
nginx服务主配置文件:
user www;                                             --- 指定nginx服务worker进程用户信息
worker_processes 1;                             --- 指定nginx服务worker进程数量信息
                                                              worker进程数量 ==服务器总的CPU核心数
error_log /var/log/nginx/error.log notice;       --- 错误日志文件信息
pid /var/run/nginx.pid;                                   --- 记录服务进程文件
events {
worker_connections 1024;                            --- 每个worker进程可以支持并发连接数
                                                                    总的服务并发连接数=worker_processes*worker_connections < 系统打开文件数(ulimit -n)
open files (-n) 1024 ~ 65535
}
http {
include /etc/nginx/mime.types;                   --- 加载包含其他配置文件
mime.types                                                 --- 媒体资源类型文件 可以识别静态资源信息
                                                                   静态资源 --- nginx服务处理
                                                                   动态资源 --- nginx服务无法处理
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" "$http_x_real_ip"';
                                                                   --- 定义日志文件格式信息
access_log /var/log/nginx/access.log main;
                                                                    --- 访问日志信息设置
sendfile on;                                                  --- 是否开启高效传输功能 提升数据传输效率/避免数据包拥塞
keepalive_timeout 65;                                  --- 会话超时时间
                                                                     当时间改为0 表示HTTP连接会话为短连接
include /etc/nginx/conf.d/*.conf;                   --- 需要加载扩展配置文件
}


nginx服务扩展配置文件:
vim www.conf
server {
listen 80;                                                            --- 设置监听地址,设置监听端口
server_name www.goodboy.com;                      --- 访问网站地址域名
location / {
root /html/www;                                                  --- 定义站点目录
index index.html index.htm;                                --- 定义首页文件 默认加载文件
}
}

nginx服务配置注意事项:
1,配置文件区域划分
① 核心区域配置部分:开头前几行
② 事件区域配置部分:events{} 服务性能参数信息
③ 协议区域配置部分:http{} 服务功能参数信息
④ 主机区域配置部分:server{} 网站功能配置信息
⑤ location区域配置部分: 根据匹配不同uri,进行不同处理策略
⑥ if区域配置部分: 请求资源信息做判断
2. 具体配置文件规范
① 指令信息必须写在指定区域中
② 指令信息结尾必须有分号
③ 区域信息必须添加花括号
④ 确认指令信息是否书写正确

 

 

虚拟主机配置方式:

1)网站服务多虚拟主机配置 (一个服务器中是有多个网站构建)
第一个里程:编写配置文件
vim www.conf
server {
listen 80;
server_name www.goodboy.com;
location / {
root /html/www;
index index.html index.htm;
}
}

vim bbs.conf
server {
listen 80;
server_name bbs.goodboy.com;
location / {
root /html/bbs;
index index.html index.htm;
}
}

vim blog.conf
server {
listen 80;
server_name blog.goodboy.com;
location / {
root /html/blog;
index index.html index.htm;
}
}

主配置文件
vim nginx.conf
include /etc/nginx/conf.d/*.conf;

第二个里程:准备环境
mkdir -p /html/{www,bbs,blog}
echo "10.0.0.7 www.goodboy.com" >/html/www/index.html
echo "10.0.0.7 bbs.goodboy.com" >/html/bbs/index.html
echo "10.0.0.7 blog.goodboy.com" >/html/blog/index.html

第三个里程:进行服务重启测试
重启省略
需要配置本地域名解析
浏览器访问测试

2)网站服务页面不同访问方式
① 基于域名进行访问
② 基于端口进行访问
③ 基于地址进行访问

① 基于域名访问实现方式:

www.goodboy.com
② 基于端口访问实现方式:
第一个里程:编写配置文件
server {
listen 8081;
server_name www.goodboy.com;
location / {
root /html/www;
index index.html index.htm;
}
}

第二个里程:重启nginx服务进行测试
域名访问+端口

www.goodboy.com:8081

③ 基于地址进行访问:
编写配置文件:指定监听地址
server {
listen 10.0.0.7:80;
server_name www.goodboy.com;
location / {
root /html/www;
index index.html index.htm;
}
}
PS:一定要重启操作,不能平滑重启

3)网站服务日志文件部署配置
配置使用方法:
· 错误日志:
配置方法一:多个网站使用默认错误日志
error_log /var/log/nginx/error.log warn;
debug info notice warn error crit alert emerg;

配置方法二:不同网站分别配置错误日志
www.conf
error_log /var/log/nginx/error_www.log warn;
bbs.conf
error_log /var/log/nginx/error_bbs.log warn;
blog.conf
error_log /var/log/nginx/error_blog.log warn;

· 访问日志:
配置方法一:多个网站使用默认访问日志
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$http_x_real_ip"';
access_log /var/log/nginx/access.log main;

10.0.0.1 - - [16/Aug/2020:14:51:22 +0800] "GET / HTTP/1.1" 200 24 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36" "-" "-"

$remote_addr --- 记录显示访问服务客户端IP地址
$remote_user --- 记录网站页面登录验证用户名称 
$time_local --- 访问网站页面时间信息
$request --- 记录客户端HTTP请求报文中请求行信息
$status --- 记录请求资源响应状态码信息 
$body_bytes_sent --- 记录访问资源消耗网站流量信息 
$http_referer --- 记录调用网站资源地址信息 
$http_user_agent --- 记录用户访问网站所使用客户端程序
$http_x_forwarded_for --- 和负载均衡反向代理有关系 
$http_x_real_ip --- 和负载均衡反向代理有关系
===============================================================
补充说明:访问此信息作用 /html/www/favicon.ico
用于标题栏logo图标信息
================================================================

配置方法二:不同网站分别配置访问日志
www.conf
access_log /var/log/nginx/access_www.log main;
bbs.conf
access_log /var/log/nginx/access_bbs.log main;

PS: 访问日志内容格式设置方法,需要参考nginx服务可用变量信息

4)网站服务实现数据共享功能
nginx_http_autoindex_module: 此模块可以实现站点目录数据共享功能
autoindex指令:确认开启共享页面功能

第一个里程:创建数据共享站点目录
mkdir /html/data -p
创建不同共享数据资源信息

第二个里程:编写配置文件
# cat data.conf
server {
listen 80;
server_name data.goodboy.com;
error_log /var/log/nginx/error_data.log warn;
location / {
root /html/data;
autoindex on;
charset utf-8;
}
}

第三个里程:重启服务进行测试
省略...

5) 网站服务访问控制功能
· 利用黑名单和白名单
allow:允许访问网站地址信息或网段信息
deny: 拒绝访问网站地址信息或网段信息

# cat data.conf
server {
listen 80;
server_name data.goodboyboy.com;
error_log /var/log/nginx/error_data.log warn;
allow 10.0.0.0/24;
deny all;
location / {
root /html/data;
autoindex on;
charset utf-8;
}
}

· 利用网站页面认证功能
auth_basic --- 开启认证功能
auth_basic_user_file --- 定义加载一个认证文件

第一个里程:编写配置文件:

server {
listen 80;
server_name data.goodboy.com;
error_log /var/log/nginx/error_data.log warn;
allow 10.0.0.0/24;
deny all;
location / {
root /html/data;
autoindex on;
charset utf-8;
}
location /开发共享数据/ {
root /html/data;
autoindex on;
charset utf-8;
auth_basic "开发共享数据认证";
auth_basic_user_file /html/password/dev;
}
location /运维共享数据/ {
root /html/data;
autoindex on;
charset utf-8;
auth_basic "运维共享数据认证";
auth_basic_user_file /html/password/sa;
}
}


第二个里程: 需要生成用户认证文件
mkdir -p /html/password/
yum install -y httpd-tools
htpasswd 创建密码文件(密码文件是明文的)
-c Create a new file
创建密码文件
-b Use the password from the command line rather than prompting for it.
在创建用户时可以直接设置密码信息(不用免交互设置密码)

用法一:创建密码文件和用户信息
htpasswd -bc /html/password/dev dev  dev123

用法二:添加新的认证用户
htpasswd -b /html/password/sa   sa   sa123

用法三:删除认证用户
htpasswd -D /html/password/dev dev

第三个里程:重启服务进行测试访问
....

6) 网站location配置介绍
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } --- 根据匹配uri资源信息 做不同的处理
location @name { ... }
Default: —
Context: server, location

= :修饰符可以定义URI和位置的精确匹配
~ :修饰符(用于区分大小写的匹配)
~* :修饰符(用于不区分大小写的匹配)
^~ :修饰符,不检查正则表达式 不识别正则信息
可以用于优先匹配
/ : 默认匹配信息
/dir/ :加载指定目录进行匹配

Syntax: return code [text]; return code URL; return URL;
Default: —
Context: server, location, if

location = / { = 进行精确匹配
charset utf-8;
return 200 "location精确匹配 =";
}

location / {
charset utf-8;
return 200 "location默认匹配 /";
}

location /oldboy/ {
charset utf-8;
return 200 "location目录匹配 /oldboy";
}

location ^~ /images/ {
charset utf-8;
return 200 "location优先匹配 /images/";
}

location ~* \.(gif|jpg|jpeg)$ {
charset utf-8;
return 200 "location不区分大小写匹配 ~*";
}

location ~ \.(avi|mp3|mp4)$ {
charset utf-8;
return 200 "location区分大小写匹配 ~*";
}

7) 网站页面优雅显示
Syntax: error_page code ... [=[response]] uri;
Default: —
Context: http, server, location, if in location

方法一:加载指定页面信息
cat www.conf
server {
listen 80;
server_name www.goodboy.com;
error_log /var/log/nginx/error_www.log warn;
error_page 404 https://www.qq.com/?pgv_ref=404;
location / {
root /html/www;
index index.html index.htm;
}
}

方法二:加载指定图片信息
server {
listen 80;
server_name www.goodboy.com;
error_log /var/log/nginx/error_www.log warn;
error_page 404 /test.jpg;
location = /test.jpg {
root     /html/www/error_page_info;

}
location / {
root /html/www;
index index.html index.htm;
}
}

posted on 2021-03-15 18:22  弓长三寿  阅读(354)  评论(0编辑  收藏  举报