Nginx安装与核心配置
一、Nginx的编译与安装
1、Nginx安装环境准备
(1)Linux内核2.6及以上版本
只有2.6之后才支持epool ,在此之前使用select或pool多路复用的IO模型,无法解决高并发压力的问题。通过命
令 uname -a 即可查看。
#查看 linux 内核
uname -a
(2)GCC编译器
GCC(GNU Compiler Collection)可用来编译C语言程序。Nginx不会直接提供二进制可执行程序,只能下载源码进行编译。
(3)PCRE库
PCRE(Perl Compatible Regular Expressions,Perl兼容正则表达式)是由Philip Hazel开发的函数库,目前为很多软件所使用,该库支持正则表达式。
(4)zlib库
zlib库用于对HTTP包的内容做gzip格式的压缩,如果我们在nginx.conf里配置了gzip on,并指定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量。
(5)OpenSSL开发库
如果我们的服务器不只是要支持HTTP,还需要在更安全的SSL协议上传输HTTP,那么就需要拥有OpenSSL了。另外,如果我们想使用MD5、SHA1等散列函数,那么也需要安装它。
上面几个库都是Nginx 基础功能所必需的,为简单起见我们可以通过yum 命令统一安装。
2、安装步骤
2.1 yum 安装nginx 环境
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre pcre-devel
2.2获取Nginx源码
一、进入安装目录
cd /usr/local/devlop/
mkdir nginx [放在nginx目录下]
nginx 下载页:http://nginx.org/en/download.html 。
二、下载nginx 最新稳定版本
wget http://nginx.org/download/nginx-1.14.0.tar.gz
#解压
tar -zxvf nginx-1.14.0.tar.gz
进入解压之后的目录
cd /usr/local/devlop/nginx-1.14.0
三、编译安装
第一种,最简单的安装:
# 全部采用默认安装
./configure && make && make install
执行完成之后 nginx 运行文件 就会被安装在 /usr/local/nginx 下。
第二种
2.1 这里用第二种,基于参数构建
./configure --prefix=/usr/local/devlop/nginx --with-pcre --with-http_stub_status_module --with-http_ssl_module [完整命令 包含http]
解释 : ## 指定编译目录
./configure --prefix=/home/user/local/devlop/nginx
# --prefix= 指定编译目录
2.2 make 安装 打包成二进制文件 在nginx/objs下生成 nginx
2.3 make install 部署到指定目录 即上面命令指定的 prefix中去
四、模块更新
# 添加状态查查看等其它模块
./configure --with-pcre --with-http_stub_status_module --with-http_ssl_module
# 重新创建主文件
make
# 将新生成的nginx 文件覆盖 旧文件。
cp objs/nginx /usr/local/devlop/nginx/sbin/
# 查看是否更新成功 显示了 configure 构建参数表示成功
/usr/local/devlop/nginx/sbin/nginx -V
注:每次新增模块,需要带上之前增加的模块的参数[通过 /usr/local/devlop/nginx/sbin/nginx -V 查看],防止覆盖掉了之前的模块导致丢失
2.3 Nginx常用命令
cd /usr/local/devlop/nginx
#查看命令帮助
./sbin/nginx -?
#默认方式启动:
./sbin/nginx
#指定配置文件启动
./sbin/nginx -c /tmp/nginx.conf
#指定nginx程序目录启动
./sbin/nginx -p /usr/local/nginx/
# nginx语法检查 用来检查nginx.conf文件配置是否正确
./sbin/nginx -t
#快速停止
./sbin/nginx -s stop [会直接杀掉进程,非常粗暴]
#优雅停止
./sbin/nginx -s quit [请求进来,处理完之后再停止,关闭端口]
# 热装载配置文件
./sbin/nginx -s reload [热装载,载不重启nginx的前提下 让大部分配置变更生效 http、service、location模块里面的变更都支持热装载]
# 重新打开日志文件
./sbin/nginx -s reopen [重新打开日志]
0>cd /usr/local/devlop/nginx/logs
1>/usr/local/devlop/nginx/logs/access.log 日志文件改名为 access.log.backup之后
2>touch access.log
3>nginx日志文件会继续写入access.log中
4>执行reopen命令之后 /usr/local/devlop/nginx/sbin/nginx -s reopen之后
5>日志就可以正常写入的新建的access.log中了
# 设置全局命令,如下表示设置启动用户为root
./sbin/nginx -g "user root;"
二、Nginx架构说明
2.1Nginx 架构图:
用户发送HTTP/HTTPS请求,由Nginx进程接收,Nginx有两种进程,一种是Master进程,一种是Worker进程,Worker进程作用:请求只会发给Worker进程,由Worker进程进行Web服务的处理,Worker进程除了可以对静态文件进行处理(将静态文件返回给用户),还可以做反向代理(Nginx后端还可以跟上应用服务,比如php服务,tomcat,netty,甚至是另一个Nginx),同时还可以进行缓存。也就是说请求不光Nginx可以进行处理,也可以转发给后端服务进行反向代理,也可以指向缓存。
Master进程作用:类似项目经理的作用,只管理,不干活。用来专门监测Worker进程的工作状态,看它有没有挂掉,master进程也会去监测后端服务的健康状况,如果后端进程挂掉了,worker进程就没必要往后端发了。健康检查的工作全部由master进程完成。 reload、reopen这些命令都是发送给master进程,由master进程进行处理。
可以通过修改配置来修改worker进程的数量。
2.2 Nginx 核心模块:
Nginx核心模块文档:https://nginx.org/en/docs/
三、Nginx 配置与使用
3.1 Nginx配置文件语法
# 配置Nginx的worker进程数量为1
worker_processes 1;
# 配置块
# 事件模块的配置
events {
worker_connections 1024; # 属性名 属性参数值 表示每个worker进程最大可以接收1024个并发的连接
}
# http根路径,只能配置一个
http {
include mime.types; # 引入mime.types文件 对应nginx 安装目录下的 conf目录的mime.types文件 纯粹的文本引入 类型复制文本进来
default_type application/octet-stream; # 默认类别
sendfile on; # 是否可以发送文件
keepalive_timeout 65; # 长连接的超时时间
# 服务模块配置 可以有多个 多个的话 listen server_name 不能都完全一模一样
server {
listen 80; # 端口号 监听的端口号 多个server的情况下 listen + server_name 不能完全重复
server_name localhost; # 指向哪个服务器 可以配置多个 如果没有用域名访问 会访问默认模块【即多个server配置取最前面的 或者通过加default来指定 比如 server_name www.test.com default; 】
location / { # 一个server里面可以有多个location server里面的参数 即上面的参数会被location继承 / 表示只要以/ 开头的请求 都由这个location进行处理
root html; # 代表当前站点的根目录 这里的html是一个相对路径 相对于nginx的根目录[/usr/local/devlop/nginx 路径下有名字为html的文件 即浏览器80端口打开的页面]的html 【最好使用绝对路径】
index index.html index.htm; # 主页文件
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# 每个server代表一个服务 每个server会继承上面的属性和属性值
server {
listen 80;
server_name www.test.com www.shop.com *.shop.com shop.com shop.*; # 可以配置多个 空格隔开 支撑通配符 不支持正则表达式 匹配优先级 : 全路径匹配> *号在左边的 > 先后顺序
location / { # 默认访问这个路径
root html;
# proxy http:/upsteam/ 可以配置proxy 进行代理
index index.html index.htm;
}
location /static { # 可以配置静态文件访问这个路径 请求以/static开头 就由这个location进行处理
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
Nginx配置分为三种:模块、属性、参数。
1、放在根路径的为属性<属性名称 属性参数>。 如:worker_processes 1;
2、用大括号包裹起来的叫配置块。
http模块配置详解 层级关系
http{
server{
location / {
}
location / { # location 路径 指定访问路径的意思
}
}
server{
location / {
}
location / {
}
}
}
root 配置踩坑躲避:
root /www/shop/; 路径以/开头 表示绝对路径,如果想配置相对路径的话前面不要加/
root /use/local/devlop/shop; 可以配置绝对路径【推荐】
root www/shop/; 路径非/开头表示相对路径 会以nginx 的html文件为根路径,然后拼接 www/shop路径。
3.2 配置第一个静态WEB服务
红框中 通过root指定 地址 访问的时候会默认加上location后面配置的 /wj 即路径变成/www/wj/wj
解决办法:不指定root,而是通过指定alias 即配置变成
location /wj {
alias /www/wj/;
index index.html;
}
3.3 配置案例
3.3.1 动静分离实现
基于目录动静分离
Nginx关键配置如下:
server {
listen 80;
server_name www.shop.com;
root /www/shop/;
location / { # 进行动态访问
index index.html;
}
location /static { # 进行静态访问
alias www/test/static;
index index.html;
}
}
基于正则动静分离
location ~* \.(gif|jpg|png|css|js)$ {
root /usr/www/static;
}
访问www.shop.com/code.css即可访问到 /usr/www/static/code.css文件
注:
~代表使用正则表达式
*表示不区分大小写
3.3.2 防盗链
一般针对图片等静态资源。
Nginx配置
# 加入至指定location 即可实现
valid_referers none blocked *.shop.com;
if ($invalid_referer) {
return 403;
}
表明 只能由来自 *.shop.com的请求来访问 ,否则返回403
完整server配置
server {
listen 80;
server_name www.shop.com default;
location / {
# root /usr/local/devlop/nginx/www/shop/;
root www/shop/;
index index.html;
}
location /xiaogang {
# alias /usr/local/devlop/nginx/www/xiaogang;
alias www/xiaogang/;
index index.html;
}
location ~* \.(gif|jpg|png|css|js)$ {
valid_referers none blocked *.shop.com;
if ($invalid_referer) {
return 403;
}
root www/static;
}
}
结果:
3.3.3 多域名站点
3.3.4 下载限速
Ngnix配置
location /download {
limit_rate 1m; //限制每S下载速度
limit_rate_after 30m; // 超过30 之 后在下载 超过30M之后再限速
}
可以写在location中,也可以写在server里面
3.3.5 IP 黑名单
#封禁指定IP
deny 192.168.0.1;
allow 192.168.0.1;
#开放指定IP 段
allow 192.168.0.0/24;
#封禁所有
deny all;
#开放所有
allow all;
# 创建黑名单文件
echo 'deny 192.168.0.132;' >> balck.ip
#http 配置块中引入 黑名单文件
include black.ip;
如果写在http层级,则对所有的都生效
如果写在server层级,则对特定的server生效
如果写在location层级,则对特定的location生效
通过include引入 black.ip 文件 include是直接复制内容到配置文件中,所以分号一定不能少;
deny 192.168.1.104;
http{
# include black.ip;
server {
# include black.ip;
listen 80;
server_name www.shop.com default;
location / {
# root /usr/local/devlop/nginx/www/shop/;
root www/shop/;
index index.html;
}
location /xiaogang {
include black.ip;
# alias /usr/local/devlop/nginx/www/xiaogang;
alias www/xiaogang/;
index index.html;
}
location ~* \.(gif|jpg|png|css|js)$ {
valid_referers none blocked *.shop.com;
if ($invalid_referer) {
return 403;
}
root www/static;
}
}
}
3.3.6 基于user-agent分流
3.4 日志配置
*日志配置:*
日志格式:
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;
#基于域名打印日志
access_log logs/$host.access.log main;
error日志的设置
语法:error_log /path/file level;
默认:error_log logs/error.log error;
level是日志的输出级别,取值范围是debug、info、notice、warn、error、crit、alert、emerg,
针对指定的客户端输出debug级别的日志
语法:debug_connection[IP|CIDR]
events {
debug_connection 192.168.0.147;
debug_connection 10.224.57.0/200;
}
注意:debug 日志开启 必须在安装时 添加 --with-debug (允许debug)
标签:www,nginx,配置,server,Nginx,html,location,安装 From: https://www.cnblogs.com/haze666/p/17133997.html