分享好友 系统运维首页 频道列表

nginx1.18.0

Nginx教程  2023-03-08 14:500

nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。 ------百度百科

官网
GitHub
nginx的管理员手册
nginx第三方模块官网

安装

yum方式安装nginx

1、安装先决条件:

sudo yum install yum-utils  -y

2、请创建/etc/yum.repos.d/nginx.repo 包含以下内容

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

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

3、默认情况下,使用稳定的nginx软件包的存储库。如果要使用主线nginx软件包,请运行以下命令

sudo yum-config-manager --enable nginx-mainline

4、安装nginx

sudo yum install nginx

当提示您接受GPG密钥时,请验证指纹是否匹配 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62,如果是,则接受它。

编译方式安装

1、下载编译时需要的依赖

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

2、获取nginx

mkdir /app
cd /app
wget http://nginx.org/download/nginx-1.18.0.tar.gz

3、创建nginx用户

useradd nginx -M -s /sbin/nologin 
tar xf nginx-1.18.0.tar.gz

4、进入nginx目录进行编译

cd nginx-1.18.0
./configure  --prefix=/etc/nginx/ --sbin-path=/usr/local/bin/ --user=nginx --group=nginx   --with-http_ssl_module  --with-http_stub_status_module --conf-path=/etc/nginx/nginx.conf  --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid
make && make install

systemd管理

cat >/etc/systemd/system/nginx.service<<EOF
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/local/bin/nginx -t
ExecStart=/usr/local/bin/nginx
ExecReload=/usr/local/bin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start nginx.service
systemctl enable nginx.service

使用第三方模块

--add-module=

动态添加第三方模块

1、停止正在运行的nginx

systemctl stop nginx

2、获取第三方模块

GitHub搜索第三方模块名字并下载zip包
unzip 包名

nginx1.18.0

3、进行编译

cd /app/nginx-1.18.0
./configure  --prefix=/etc/nginx/ --sbin-path=/usr/local/bin/ --user=nginx --group=nginx  --with-http_ssl_module --with-http_stub_status_module --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --with-http_stub_status_module --add-module=/etc/nginx/module/ngx_cache_purge-master
make

注意

不要启用参数--modules-path=path,否则手动指定的模块位置会不被识别,安装新增加的模块失败。

4、拷贝nginx文件进行覆盖

cp /app/nginx-1.18.0/objs/nginx /usr/local/bin/nginx

注意

确保nginx已经不在运行状态,否则会覆盖失败

5、启动nginx并查看模块

systemctl  start nginx
nginx -V

注释
编译安装详细参考官方文档

作用

提供静态内容

Web服务器的一项重要任务是分发文件(例如图像或静态HTML页面)。

server {
    location / {
        root /data/www;
    }

    location /images/ {
        root /data;
    }
}

注释:

如果有多个匹配的location块,nginx将选择前缀最长的块。也就是匹配精确度最高的模块

简单的代理服务器

nginx的一种常用用法是将其设置为代理服务器,这意味着服务器可以接收请求,将请求传递给代理服务器,从请求中检索响应并将它们发送给客户端。

客户端的图像请求,本地目录中的文件提供服务

客户端的其他请求,转发到代理服务器

server {
    location / {
        proxy_pass http://localhost:8080/;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

注释

~:正则表达式的开头固定写法

(): 识别为一个整体

| 或者

$ 以什么结尾

设置FastCGI代理

nginx可用于将请求路由到FastCGI服务器,该服务器运行使用各种框架和编程语言构建的应用程序

与Fast CGI服务器一起使用的最基本的nginx配置包括使用fastcgi_pass 指令而不是proxy_pass指令,以及fastcgi_param 指令来设置传递给FastCGI服务器的参数。

server {
    location / {
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param QUERY_STRING    $query_string;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

注释:

SCRIPT_FILENAME:用于确定脚本名称

QUERY_STRING: 用于传递请求参数

配置

配置文件的结构

nginx受配置文件中指定的指令控制的模块组成。伪指令分为简单伪指令和块伪指令。一个简单的指令由名称和参数组成,这些名称和参数之间用空格分隔,并以分号结尾。
块指令的结构和简单指令的结构相同,但是有其他指令,称为上下文。

为注释内容

使用

nginx的命令以及工作机制

nginx有一个主进程和几个工作进程。主进程的主要目的是读取和评估配置以及维护工作流程。工作进程对请求进行实际处理。
nginx使用基于事件的模型和依赖于操作系统的机制来有效地在工作进程之间分配请求。工作进程的数量在配置文件中定义,可以针对给定的配置固定,也可以自动调整为可用CPU内核的数量

nginx命令

信号:
stop 快速关闭
quit  正常关闭
reload  重新加载配置文件
reopen   重新打开日志文件 

解释
nginx -s reload工作机制
一旦主进程接收到重新加载配置的信号,它将检查新配置文件的语法有效性,并尝试应用其中提供的配置。如果加载成功,则主进程将启动新的工作进程,并将消息发送到旧的工作进程,要求他们关闭。
否则,主进程将回滚到更改之前继续使用旧配置。
旧的工作进程接收到关闭命令,停止接受新的连接并继续为当前请求提供服务,直到为所有此类请求提供完服务后,旧的工作进程退出。
nginx -s stop 和 nginx -s quit 的区别
quit 是一个优雅的关闭方式,nginx退出前完成已连接的连接请求
stop 是快速关闭,不管有没有正在处理的请求

nginx配置文件

指令
配置文件由指令及其参数组成。每个指令以分号结尾。其他指令用作将相关指令组合在一起的“容器”,将它们括在花括号({})中;这些通常称为块。

user             nobody;
error_log        logs/error.log notice;
worker_processes 1;

功能特定的配置文件

include conf.d/http;
include conf.d/stream;
include conf.d/exchange-enhanced;

语境
events –常规连接处理
http – HTTP流量
mail –邮件流量
stream – TCP和UDP流量
虚拟服务器
每个流量处理都包含server块,定义控制请求处理的虚拟服务器。可以在server上下文中定义指令,根据流量类型而有所不同

对于http流量,每个server指令控制特定域或者IP地址上对资源的请求处理。location上下文中的一个或者多个server上下文定义了如何处理url的特定集合。
对于邮件和TCP流量(mail和stream上下文),server每个伪指令控制到达特定TCP端口或者UNIX套接字的流量处理
示例

user nobody; # a directive in the 'main' context

events {
    # configuration of connection processing
}

http {
    # Configuration specific to HTTP and affecting all virtual servers  

    server {
        # configuration of HTTP virtual server 1       
        location /one {
            # configuration for processing URIs starting with '/one'
        }
        location /two {
            # configuration for processing URIs starting with '/two'
        }
    } 
    
    server {
        # configuration of HTTP virtual server 2
    }
}

stream {
    # Configuration specific to TCP/UDP and affecting all virtual servers
    server {
        # configuration of TCP virtual server 1 
    }
}

通常,子上下文将继承父级别包含的指令设置。
某些指令可以出现在多个上下文中,在这种情况下,您可以通过在子上下文中包含该指令来覆盖从父项继承的设置。
proxy_set_header指令

nginx_manual

BSD(类Unix)系统管理员手册
名字 HTTP和反向代理服务器,邮件代理服务器
简介 nginx [-?hqTtVv] -c 文件 -g 指令 -p 前缀 -s 信号
说明 nginx是一个HTTP和反向代理服务器,一个邮件代理
服务器和通用TCP/UDP代理服务器。它以高性能著称,
稳定,功能集丰富,配置简单,资源消耗低。
选项如下

-?, -h 打印帮助
-c file 使用备用配置文件。
-g 设置全局配置指令。有关详细信息,请参见示例。
-p 设置前缀路径。默认值为/etc/nginx。
-q 在配置测试期间禁止显示非错误消息。
-s signal 向主进程发送信号。
下表显示了相应的
响应系统信号
stop SIGTERM
quit SIGQUIT
reopen SIGUSR1
reload SIGHUP
-T 与-t相同,但还将配置文件转储到标准输出。

-t 不要运行,只需测试配置文件。nginx检查con配置文件语法,然后尝试打开配置文件。
-V 打印nginx版本、编译器版本和配置脚本参数。
-v 打印nginx版本。

信号
nginx的主进程可以处理以下信号:

 SIGQUIT          优雅地关闭。
 SIGUSR1         重新打开日志文件。
 SIGUSR2         动态升级nginx可执行文件。
 SIGWINCH       优雅地关闭工作进程。

虽然通常不需要显式地控制工作进程,但它们支持还有一些信号

 SIGINT, SIGTERM  Shut down quickly.  SIGINT,SIGTERM很快就关机了。
 SIGHUP         SIGHUP重新加载配置,使用新的con启动新的工作进程并优雅地关闭旧的工作进程。
 SIGQUIT          Shut down gracefully. 优雅地关闭。
 SIGUSR1          Reopen log files. 重新打开日志文件。
 SIGUSR2          Upgrade the nginx executable on the fly. 动态升级nginx可执行文件。
 SIGWINCH         Shut down worker processes gracefully.优雅地关闭工作进程。

DEBUGGING LOG 调试日志
调试日志要启用调试日志,请重新配置nginx以使用调试进行生成

  ./configure --with-debug ...

然后设置错误日志的调试级别

error_log /path/to/log debug;

还可以启用对特定IP地址的调试:

   events {
           debug_connection 127.0.0.1;
   }

环境
NGINX环境变量由NGINX内部使用,不应设置直接由用户执行。
文件
/var/run/nginx.pid 包含nginx的进程ID
/etc/nginx/nginx.conf 主配置文件
/var/log/nginx/error.log 错误日志文件
退出状态
成功时退出状态为0,如果命令失败,则为1。
示例
测试配置文件~/mynginx.conf公司具有PID和数量的全局指令
工作进程数

nginx -t -c ~/mynginx.conf   -g "pid /var/run/mynginx.pid; worker_processes 2;"

另请参见

 http://nginx.org/en/docs/
 http://nginx.org/en/support.html

查看nginx安装的模块

nginx -V 2>&1 | grep -- '模块名'

查看更多关于【Nginx教程】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
Nginx端口占用问题
错误信息:nginx: [emerg] listen() to 0.0.0.0:80, backlog 511 failed (98: Address already in use)主要是端口被占用,通过如下命令,可以查看该端口被那个应用占用:sudo netstat -ntpl 然后kill -9 PID将其杀死关闭即可解决

0评论2023-02-13565

Linux使用nginx反向代理。可实现域名指向特定端口
在配置80指向域名的时候出现端口占用,使用kill -9无法杀死端口,应使用下面的命令来杀死进程killall -9 nginx(使用完本命令需要再把配置过的配置文件重新启动。命令写在了PS下面)后在root权限下的nginx的sbin下使用./nginx -t(命令重启nginx并检查是否有语

0评论2023-02-13636

装tomcat和nginx心得
开机启动tomcat1:在/etc/rc.d/init.d目录下生成一个文件tomcat80802:在文件里添加如下内#!/bin/bash#2345 linux运行级别#10开机启动优先级,数值越大越排在前面,最大值100#90关机优先级#chkconfig:2345 10 90#description: tomcat8080 start....start(){ec

0评论2023-02-13333

nginx 之 proxy_pass的使用
使用注意事项proxy_pass在nginx中作代理转发使用。如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。假设下面四种情况分别用 http://192.168.1.1/proxy/test.html 进行访问。第一种:location /proxy/

0评论2023-02-13675

用Nginx代理请求,处理前后端跨域 用nginx代理请求,处理前后端跨域文件
  自从前端spa框架出现后,都是前后端分离开发了。我们在开发的时候难免会遇到跨域的问题。跨域这种问题解决的方法基本都是在服务端实现的。以java为例,我知道的有3种方法处理跨域:  1.使用 @CrossOrigin 注解对每一个接口进行跨域处理,缺点是比较麻烦

0评论2023-02-13771

手动上传图片到nginx下可访问,程序上传后访问图片报403
1. 首先查看文件权限2. 初步确定是服务器权限问题2.1 解决方案一:更改文件权限2.2 解决方案二:修改nginx运行用户 1. 首先查看文件权限#指令如下ls -l2. 初步确定是服务器权限问题403 forbidden错误是禁止读取访问,也就是说服务器理解了请求,但是不允许访问

0评论2023-02-13745

check nginx配置文件错误:[emerg]: getpwnam(“nginx”) failed
 1、错误提示:[root@server include]# /application/nginx/sbin/nginx -t -c /applications/nginx/nginx/nginx.confnginx: [emerg] getpwnam("nginx") failed in /applications/nginx/nginx/nginx.conf:2nginx: configuration file /application/nginx/ngin

0评论2023-02-13620

Nginx 499的问题 PHP 异步 HTTP 与 NGINX 499
PHP 异步 HTTP在 PHP 代码中提交异步 HTTP 请求比较常用的方式是通过 fsockopen/fwrite/fclose 来实现,请参考如下代码。function post($host, $path, $port, $data) {$post = http_build_query($data);$len = strlen($post);$fp = fsockopen($host, $port,

0评论2023-02-13458

nginx FastCGI模块(FastCGI)配置
http://www.howtocn.org/nginx:nginx%E6%A8%A1%E5%9D%97%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C%E4%B8%AD%E6%96%87%E7%89%88:standardhttpmodules:fastcginginx官方文档:http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html 摘要这个模块允许nginx

0评论2023-02-10486

nginx+tomcat反向代理下使用tomcat-redis-session-manager进行session共享中值得注意的一个问题
公司目前项目使用nginx反向代理+多个tomcat进行负载均衡,之前使用ip_hash策略进行session控制。近期有考虑不再使用ip_hash策略,所以需要进行session共享。根据项目实际情况,拟考虑使用开发配置比较简单,应用比较广泛的tomcat-redis-session-manager方式进

0评论2023-02-10303

nginx报错:./configure: error: C compiler cc is not found, gcc 是已经安装了的
源码安装nginx报错,找不到gcc,但是实际上gcc是存在的,如下:# ./configure checking for OS + Linux 3.10.0-957.el7.x86_64 x86_64checking for C compiler ... not found./configure: error: C compiler cc is not found#  尝试找寻gcc# whereis gccgcc: /

0评论2023-02-10667

更多推荐