01 、nginx安装部署:
两种安装方式: 01. yum安装软件 a 使用官方yum源进行安装 安装的是最新版本 软件目录结构比较标准 (推荐) b 使用非官方yum源进行安装 安装的不是最新版 目录结构会发生变化 02. 编译安装软件 第一个步骤: wget http://nginx.org/download/nginx-1.16.0.tar.gz PS: 解决软件的依赖 openssl-devel pcre-devel 第二个步骤: 解压下载好的软件, 并进入到软件目录中 第三个步骤: 编译安装三步曲 a 进行配置操作 ./configure --prefix= --user=USER
./configure --prefix=/data/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream
--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进程(安全) b 进行软件的编译过程: make 编译(翻译) C(英国人) 代码(任务文件) 系统识别 翻译 系统(中国人)处理代码 翻译效率比较低 翻译官(gcc) python(日本人) 代码(任务文件) 系统识别 翻译 系统(中国人)处理代码 翻译效率比较高 百度翻译(python解释器) c 编译安装过程 make install yum官方源安装方法: 第一个历程: 更新nginx官方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 第二个历程: yum安装nginx软件 yum install -y nginx 第三个历程: 启动nginx服务,检查服务是否安装正确 systemctl start nginx systemctl enable nginx 测试访问nginx服务
02、 nginx服务配置文件
/etc/nginx/nginx.conf --- 主配置文件 第一个部分: 配置文件主区域配置 user www; --- 定义worker进程管理的用户 补充: nginx的进程 master process: 主进程 ---管理服务是否能够正常运行 boss worker process: 工作进程 ---处理用户的访问请求 员工 worker_processes 2; ---定义有几个worker进程 == CPU核数 / 核数的2倍 error_log /var/log/nginx/error.log warn; --- 定义错误日志路径信息 pid /var/run/nginx.pid; --- 定义pid文件路径信息 第二个部分: 配置文件事件区域 events { worker_connections 1024; --- 一个worker进程可以同时接收1024访问请求 } 第三个部分: 配置http区域 http { include /etc/nginx/mime.types; --- 加载一个配置文件 default_type application/octet-stream; --- 指定默认识别文件类型 log_format oldboy '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; --- 定义日志的格式 access_log /var/log/nginx/access.log oldboy; --- 指定日志路径 sendfile on; ??? #tcp_nopush on; ??? keepalive_timeout 65; --- 超时时间 #gzip on; include /etc/nginx/conf.d/*.conf; --- 加载一个配置文件 } /etc/nginx/nginx.d/default --- 扩展配置(虚拟主机配置文件) 第四个部分: server区域信息(配置一个网站 www/bbs/blog -- 一个虚拟主机) server { listen 8080; --- 指定监听的端口 server_name www.oldboy.com; --- 指定网站域名 root /usr/share/nginx/html; --- 定义站点目录的位置 index index.html index.htm; --- 定义首页文件 error_page 500 502 503 504 /50x.html; --- 优雅显示页面信息 location = /50x.html { root /usr/share/nginx/html; } } 1) /etc/logrotate.d 实现nginx日志文件定时切割处理 日志切割方法一: 利用脚本实现切割 #!/bin/bash mv /var/log/nginx/access.log /var/log/nginx/access_$(date +%F).log systemctl restart nginx 日志切割方法二: 利用专用文件切割程序--logrotate
03、 nginx服务的企业应用
1. 利用nginx服务搭建一个网站(www) 第一个历程: 编写虚拟主机配置文件 cd /etc/nginx/conf.d/ vim www.conf server { listen 80; server_name www.oldboy.com; location /oldboy { root /usr/share/nginx/html; index oldboy.html; } } 第二个历程: 需要获取开发人员编写的网站代码 <html> <meta charset="utf-8"> <head> <title>nginx</title> </head> </html> 第三个历程: 重启nginx服务(平滑重启) 两种方法: systemctl reload nginx nginx -s reload nginx命令参数 -t : test configuration and exit 检查测试配置文件语法 -s : send signal to a master process: stop, quit, reopen, reload 控制服务停止或者重新启动 第四个历程: 编写DNS配置信息 真实域名: 在阿里云上进行DNS解析记录配置 模拟域名: 在windows主机的hosts文件中进行配置即可 C:\Windows\System32\drivers\etc\hosts --> 10.0.0.100 www.oldboy.com 第五个历程: 进行测试访问 浏览器中: http://www.oldboy.com
网站页面的访问原理:
01. 将域名进行解析 www.oldboy.com --- 10.0.0.100
02. 建立TCP的连接(四层协议)
10.0.0.100 目标端口 8080
03. 根据应用层HTTP协议发出请求
请求报文: hosts: bbs.oldboy.com
04. 没有相同域名的server主机,会找满足端口要求的第一个主机
显示主机的网站页面
部署搭建网站常见错误:
01. 网站服务配置文件编写不正确
404 错误
解决方法一: 修改nginx配置文件---location
解决方法二: 在站点目录中创建相应目录或文件数据信息
403 错误
解决方法一: 不要禁止访问
解决方法二: 因为没有首页文件
02. DNS信息配置不正确
03. nginx配置文件修改一定要重启服务;
站点目录中代码文件信息调整,不需要重启服务
04、nginx的企业实践应用
3. 企业中虚拟主机访问方式 a 基于域名的方式进行访问: b 基于地址的方式进行访问: (只能用指定地址访问) --- 负载均衡+高可用服务 server { listen 10.0.0.100:80; server_name www.oldboy.com; location / { root /html/www; index index.html; } } PS: 服务配置文件中涉及到地址修改,必须重启nginx服务,不能平滑重启 c 基于端口的方式进行访问: zabbix服务(apache:80) + web服务(nginx:80) --> 主机 server { listen 8080; server_name www.oldboy.com; location / { root /html/www; index index.html; } } 4. 企业中网站的安全访问配置 a 根据用户访问的地址进行控制 10.0.0.0/24 www.oldboy.com/AV/ 不能访问 172.16.1.0/24 www.oldboy.com/AV/ 可以访问 nginx访问模块: ngx_http_access_module 举例配置: location / { deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; allow 2001:0db8::/32; deny all; } 指令用法 Syntax: deny address | CIDR | unix: | all; Default: — Context: http, server, location, limit_except 第一个历程: 编写配置文件 [root@web01 conf.d]# vim www.conf server { listen 80; server_name www.oldboy.com; location / { root /html/www; index index.html; } location /AV { deny 10.0.0.0/24; allow 172.16.1.0/24; root /html/www; index index.html; } } 补充: location外面的信息, 全局配置信息 location里面的信息, 局部配置信息 b 根据用户访问进行认证 nginx认证模块: ngx_http_auth_basic_module 举例配置: location / { auth_basic "closed site"; --- 开启认证功能 auth_basic_user_file conf/htpasswd; --- 加载用户密码文件 } 第一个历程: 编写虚拟主机配置文件 server { listen 80; server_name www.oldboy.com; location / { root /html/www; index index.html; auth_basic "oldboy-01"; auth_basic_user_file password/htpasswd; } 第二个历程: 创建密码文件(文件中密码信息必须是密文的) htpasswd 创建一个有密文信息的密码文件 [root@web01 conf.d]# rpm -qf `which htpasswd` httpd-tools-2.4.6-89.el7.centos.x86_64 htpasswd命令参数说明: -c Create a new file. ***** 创建一个密码文件 -b Use the password from the command line rather than prompting for it. ***** 免交互方式输入用户密码信息 修改密码文件权限: ??? chmod 600 ./htpasswd 500 Internal Server Error 01. 内部程序代码编写有问题 02. 程序服务中文件权限不正确 curl命令参数: -u, --user USER[:PASSWORD] Server user and password [root@web01 password]# curl www.oldboy.com -u oldboy Enter host password for user 'oldboy': 10.0.0.100 www.oldboy.com [root@web01 password]# curl www.oldboy.com -u oldboy:123456 10.0.0.100 www.oldboy.com
1) 利用nginx服务搭建网站文件共享服务器 第一个步骤: 编写配置文件(www.conf) nginx模块功能: ngx_http_autoindex_module Syntax: autoindex on | off; Default: autoindex off; Context: http, server, location server { listen 80; server_name www.oldboy.com; location / { root /html/www; auth_basic "oldboy-sz-01"; auth_basic_user_file password/htpasswd; autoindex on; --- 开启nginx站点目录索引功能 } PS: 1. 需要将首页文件进行删除 2. mime.types媒体资源类型文件作用 文件中有的扩展名信息资源, 进行访问时会直接看到数据信息 文件中没有的扩展名信息资源, 进行访问时会直接下载资源 网站页面目录数据,中文出现乱码,如何解决: location / { root /html/www; #index index.html; auth_basic "oldboy-01"; auth_basic_user_file password/htpasswd; autoindex on; charset utf-8; --- 修改目录结构中出现的中文乱码问题 } 2) 利用nginx服务搭配置文件别名功能 第一个历程: 编写配置文件 server_name www.oldboy.com old.com; 第二个历程: 配置好解析信息 作用: 01. 编写网站访问测试 02. 定位要访问的网站服务器 3) 利用nginx状态模块功能对网站进行监控 状态模块: ngx_http_stub_status_module Syntax: stub_status; Default: — Context: server, location 第一个历程: 编写配置文件 location = /status { stub_status; } 第二个历程: 重启nginx服务,并且编写解析文件 systemctl reload nginx 10.0.0.100 state.oldboy.com Active connections: 激活的连接数信息 4000用户 3500 accepts: 接收的连接数汇总(综合) TCP handled: 处理的连接数汇总(综合) TCP requests: 总计的请求数量 HTTP协议请求 Reading: nginx服务读取请求报文的数量 100人点餐 Writing: nginx服务响应报文信息数量 100人响应 Waiting: nginx队列机制,要处理(读取或者响应保存进行保存) 监控
4) nginx日志功能配置
访问日志: /var/log/nginx/access.log ngx_http_log_module 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 /var/log/nginx/access.log main; 调用日志格式 $remote_addr 显示用户访问源IP地址信息 $remote_user 显示认证的用户名信息 [$time_local] 显示访问网站时间 "$request" 请求报文的请求行信息 $status 用户访问网站状态码信息 $body_bytes_sent 显示响应的数据尺寸信息 $http_referer 记录调用网站资源的连接地址信息(防止用户盗链) 老男孩nginx---access.log---莫文杰(荒原饮露---老男孩图片链接)---http_referer(链接) $http_user_agent 记录用户使用什么客户端软件进行访问页面的 (谷歌 火狐 IE 安卓 iphone) $http_x_forwarded_for ??? 负载均衡 错误日志: /var/log/nginx/error.log --- Core functionality Syntax: error_log file [level]; 指定错误日志路径以及错误日志记录的级别 Default: error_log logs/error.log error; Context: main, http, mail, stream, server, location error_log /var/log/nginx/error.log warn; 错误级别: debug :调试级别, 服务运行的状态信息和错误信息详细显示 信息越多 info :信息级别, 只显示重要的运行信息和错误信息 notice :通知级别: 更加重要的信息进行通知说明 warn :警告级别: 可能出现了一些错误信息,但不影响服务运行 error :错误级别: 服务运行已经出现了错误,需要进行纠正 推荐选择 crit :严重级别: 必须进行修改调整 alert :严重警告级别: 即警告,而且必须进行错误修改 emerg :灾难级别: 服务已经不能正常运行 信息越少 PS: 日志文件信息需要做切割处理 几个G
5) nginx服务location作用说明
模块说明: ngx_http_core_module location进行匹配(uri) 错误页面优雅显示 location /oldboy { root /html/www; error_page 404 /oldboy.jpg; } location /oldgirl { root /html/www; error_page 404 /oldgirl.jpg; } location详细配置: Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } Default: — Context: server, location location = / { --- 精确匹配 优先级01 最高 [ configuration A ] } location / { --- 默认匹配 优先级04 最低 [ configuration B ] } location /documents/ { --- 按照目录进行匹配 优先级03 [ configuration C ] } location ^~ /images/ { --- 优先匹配/不识别uri信息中符号信息 优先级02 [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { --- 不区分大小写进行匹配 优先级03 [ configuration E ] } 6) 利用nginx实现页面跳转功能 利用rewrite模块是跳转功能: http_rewrite_module Syntax: rewrite regex replacement [flag]; rewite 匹配的正则信息 替换成什么信息 Default: — Context: server, location, if rewrite www.oldboy.com/(.*) http://www.oldboy.com/$1 permanent; 重写规则配置 ^/ (.*) baidu.com / oldboy.html 跳转方式 www.baidu.com/oldboy.html 跳转方式: 永久跳转: permanent 301 会将跳转信息进项缓存 临时跳转: redirect 302 不会缓存跳转信息 出现无限跳转如何解决: 第一种方法: 利用不同server区块配置打破循环 server { server_name tv.xik518.com; rewrite ^/(.*) http://tv.aoz998.com/$1 permanent; } 第二种方法: 利用if判断实现打破循环 if ($host ~* "^oldboy.com$") { rewrite ^/(.*) http://www.oldboy.com/$1 permanent; }
证书配置 https server。注释掉之前的 http server 配置,新增 https server: server { # 服务器端口使用443,开启ssl, 这里ssl就是上面安装的ssl模块 listen 443 ssl; # 域名,多个以空格分开 server_name hack520.com www.hack520.com;
client_max_body_size 20m; #文件上传大小限制默认1m # ssl证书地址 ssl_certificate /usr/local/nginx/cert/ssl.pem; # pem文件的路径 ssl_certificate_key /usr/local/nginx/cert/ssl.key; # key文件的路径 # ssl验证相关配置 ssl_session_timeout 5m; #缓存有效期 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议 ssl_prefer_server_ciphers on; #使用服务器端的首选算法 location / { root html; index index.html index.htm; }
} 将 http 重定向 https 301永久跳转 server { listen 80; server_name hack520.com www.hack520.com; return 301 https://$server_name$request_uri; }
安全方面一般会禁用相关页面
location ~ /.*/swagger-ui.html { deny all; } location ~* \/actuator { deny all ; } location ~* \/druid { deny all ; } location ~* \/api-docs { deny all ; } location ~* \/tx { deny all ; } location ~* \/swagger-resources { deny all ; }
监控模块nginx-module-vts
参考以下
https://blog.csdn.net/zhuimeng_by/article/details/105819481
遇到的报错
Nginx配置跨域请求 Access-Control-Allow-Origin * 报错 在服务端配置 location / { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; if ($request_method = 'OPTIONS') { return 204; } } 或者只加一条: add_header Access-Control-Allow-Origin *;