首页 > 系统相关 >Nginx安装与核心配置

Nginx安装与核心配置

时间:2023-02-25 11:55:56浏览次数:45  
标签:www nginx 配置 server Nginx html location 安装

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 架构图:

image-20230212212728818

用户发送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进程进行处理。

image-20230212214944254

可以通过修改配置来修改worker进程的数量。

2.2 Nginx 核心模块:

image-20230212215527354

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服务

image-20230212233428636

红框中 通过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;
        }
    }

结果:

image-20230215233433189

image-20230215233459554

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)

nginx.conf

标签:www,nginx,配置,server,Nginx,html,location,安装
From: https://www.cnblogs.com/haze666/p/17133997.html

相关文章

  • sshpass安装
    方法一:运行yum-yinstallsshpass方法二:离线安装:下载安装包sshpass-1.06-2.el7.x86_64.rpm执行命令:rpm-ivhsshpass-1.06-2.el7.x86_64.rpm 安装后可以使......
  • 上班第一天 Android 环境配置
    其实是昨天把大概回归Android开发第一天学会查然后等待反正我是不希望以后再查了写出来吧去谷歌那边把androidstudio下载下来更新jdk版本(与传统的java开发不同......
  • 记录Nginx配置
    #ProxytotheAirsonicserverlocation/{proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarde......
  • nginx、http、tomcat虚拟主机格式
    httpd<virtualhost *:80>servername ​​www.a.com​​documentroot /var/www/html</virtualhost>nginxserver{listen 80;server_name ​​www.a.com;​​root html;i......
  • 1_log4j1和log4j2的简单配置
     项目中添加依赖log4j2<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.12.1</version></dependenc......
  • 1_log4j1和log4j2的简单配置
     项目中添加依赖log4j2<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.12.1</version></dependenc......
  • 1_log4j1和log4j2的简单配置
    ​ 项目中添加依赖log4j2<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.12.1</version>......
  • 信息安全之基线管理与安全配置—Windows安全配置
    一、Windows安全配置简介二、账户配置根据需求可以进行相关配置(里面有说明)1、密码策略  密码最短期限:意思就是密码更改后,多少天内能再次更换密码2、用户权......
  • Ubuntu Server 20.04 网卡启动及配置
    前言由于网络环境问题,联网安装会导致报错,故在安装期间disable了所有网卡,下面记录装好之后打开的过程。查看网卡信息ipa1得到本机的所有网卡信息,例如我这边网卡为eth0打......
  • VSCode配置git
    1.背景vscode中基础git;前提:本地已经安装好了git 有这样的菜单,并且可以正常上传下载代码2.步骤步骤一:找的git的安装路径:D:\ProgramFiles\Git步骤二:配置环......