源码安装Nginx
2021/8/15 7:05:36
本文主要是介绍源码安装Nginx,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
源码编译安装Nginx
目录- 一 nginx 概述
- 1.1 nginx的特点
- 1.2 nginx和 Apache的区别
- 二 : 源码安装nginx
- 2.1 关闭防火墙,将安装nginx所需软件包传到/opt/目录下
- 2.2安装依赖包,创建运行用户
- 2.3 nginx 源码包解压目录介绍
- 2.4编译安装nginx
- 2.5 nginx 目录结构
- 2.6 nginx 的命令
- 2.7 nginx 新版本升级
- 2.7.1 查看当前nginx 版本及使用模块
- 2.7.2 升级nginx 版本
- 2.8 编写nginx 启动脚本
- 2.9 访问nginx
- 部分报错解决方法:
- 报错 一
- 报错二
一 nginx 概述
1.1 nginx的特点
nginx 是一款高性能,轻量级web 服务软件
- 稳定性高
- 系统资源消耗低
- 对HTTP并发连接的处理能力高,单台物理服务器可以支持30000-50000个并发请求
1.2 nginx和 Apache的区别
Nginx | Apache |
---|---|
基于web的服务器 | 基于流程的服务器 |
所有请求都由一个线程处理 | 单个线程处理单个请求 |
避免子进程的概念 | 基于子进程 |
内存消耗和连接方面更好 | 内存消耗和连接方面一般 |
性能和可伸缩性不依赖与硬件 | 依赖于CPU和内存等硬件 |
支持热部署 | 不支持热部署 |
对于静态文件处理效率更高 | 相对一般 |
方向代理方面具有明显优势 | 相对一般 |
二 : 源码安装nginx
2.1 关闭防火墙,将安装nginx所需软件包传到/opt/目录下
systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i '7 s/enforcing/disabled/' /etc/selinux/config cd /opt/ ls nginx-1.12.0.tar.gz
2.2安装依赖包,创建运行用户
yum -y install pcre-devel zlib-devel gcc gcc-c++ make useradd -M -s /sbin/nologin nginx #nginx服务默认以nobody身份运行,创建专门用户账号,以便更准确的控制权限
2.3 nginx 源码包解压目录介绍
cd /opt/ tar zxvf nginx-1.12.0.tar.gz cd nginx-1.12.0/ ls tree -CL 1 #树状显示当前目录 1 层结构 #tree 命令可以下载 tree-1.6.0-10.el7.x86_64 包
目录/文件 | 解释 |
---|---|
auto | 存放了各个功能的脚本,configure 脚本会引用auto目录下的脚本文件来干活 |
src | 源码存放目录 |
conf | 配置示例文件 |
contrib | 提供了vim辅助工具,可以高亮nginx语法 |
html | 网页文件,一个是nginx 默认欢迎页面index.html, 一个是500错误重定向文件50x.html |
man | 存放nginx帮助文件 |
configure文件 | 脚本文件,编译前生成中间文件 |
CHANGES | 显示每一个版本中提供了哪些特性和bugfix |
CHANGES.ru | 俄语版本CHANGES |
2.4编译安装nginx
cd /opt/nginx-1.12.0 ./configure --help #查看nginx 有哪些模块,以及参数
cd /opt/nginx-1.12.0 ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module make && make install ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统可以识别nginx指令
2.5 nginx 目录结构
tree -CL 1
目录 | 作用 |
---|---|
client_body_temp | 此目录的作用是,客户端POST一个文件,长度超过了nginx缓冲区的大小,把文件临时暂存到此目录下,有可能是部分内容,也有可能是全部内容。 |
conf | 配置文件的目录 |
fastcgi_temp | FastCGI临时数据目录。 编译安装时,使用--http-fastcgi-temp-path 指定此目录的路径、名称。 配置文件中可有使用fastcgi_temp_path 指定此目录的路径、名称和使用几级子目录。 |
html | 默认解析的静态文件目录(站点目录) |
logs | 日志目录 |
proxy_temp | 从代理服务器接收到数据的临时文件存放的目录。 |
sbin | 命令目录 |
scgi_temp | 从SCGI服务器接收到数据的临时文件存放的目录。 |
uwsgi_temp | 从uwsgi服务器接收到数据的临时文件存放的目录。 |
2.6 nginx 的命令
#查看帮助信息 /usr/local/nginx/sbin/nginx -h #启动nginx nginx #停止nginx 服务 nginx -s stop #优雅的停止nginx 服务(处理完所有请求后在停止服务) nginx -s quit #重新加载配置文件 nginx -s reload #重新启动。 nginx -s reopen #重新打开日志文件 kill -USR1 pid号 #nginx 访问日志文件在nginx工作目录的logs目录下。如果目录下的access.log和error.log 文件 被移走或删除改名,在不重启的情况下,访问nginx 时,nginx 不会自动创建访问日志。 #检查配置文件语法 nginx -t #查看nginx信息(可以查看到版本号,模块信息) nginx -V #指定配置文件 nginx -c filename #设置前缀路径 nginx -p prefix #设置配置文件外的全局指令 nginx -g directives
使用kill 命令加信号控制nginx
使用 kill -l 查看支持的信号
#查看nginx pid 号(我的安装目录是/usr/lcoal/nginx) cat /usr/local/nginx/logs/nginx.pid #停止 kill -3 pid号 kill -s QUIT pid号 killall -3 nginx killall -s QUIT pid号 #重载 kill -1 pid号 kill -s HUP pid号 killall -1 nginx killall -s HUP nginx #日志分割,重新打开日志 kill -USR1 pid号 #平滑升级 kill -USR2 pid号
2.7 nginx 新版本升级
2.7.1 查看当前nginx 版本及使用模块
nginx -V
2.7.2 升级nginx 版本
#先把包传到/opt/ 目录下然后解压安装 cd /opt tar -zxvf nginx-1.12.2.tar.gz ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module make mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old cp objs/nginx /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx make upgrade #或者 kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` nginx -V
2.8 编写nginx 启动脚本
如果使用免交互,要注意有变量,不可以让变量被替换
方法一:
vim /etc/init.d/nginx #!/bin/bash #chkconfig: 35 99 20 COM="/usr/local/nginx/sbin/nginx" PID="/usr/local/nginx/logs/nginx.pid" case "$1" in start) $COM ;; stop) kill -s QUIT $(cat $PID) ;; restart) $0 stop $0 start ;; reload) kill -s HUP $(cat $PID) ;; *) echo "Usage: $0 {start|stop|restart|reload}" exit 1 esac exit 0 chmod +x /etc/init.d/nginx chkconfig --add nginx # 添加为系统服务,可以被service 管理 systemctl daemon-reload #让服务配置生效,可以使用systemctl 管理
方法二:
如果使用免交互,要注意有变量,不可以让变量被替换
rm -rf /etc/init.d/nginx vim /lib/systemd/system/nginx.service #目录 /lib/systemd/system/ 存放systemctl 管理的服务文件 [Unit] Description=nginx After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target chmod 754 /lib/systemd/system/nginx.service systemctl daemon-reload
2.9 访问nginx
firefox http://192.168.23.103
部分报错解决方法:
报错 一
nginx: [emerg] getpwnam("nginx") failed
原因:
因为编译时指定了用户和组,但是又没有创建该用户,所以报错
解决:
方法一:创建 该用户
useradd —M -s /sbin/nologin nginx
方法二:修改配置文件,将user nobody启用
vim /usr/local/nginx/conf/nginx.conf user nobody #指定启动用户为 nobody nginx -s reload #重新加载配置文件
报错二
当nginx 启动时候报错
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
然后进入日志文件 /var/log/messages查看,发现以后如下信息
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
原因
这是因为nginx服务默认使用 80 端口。当端口被占用,就会出现以上报错
解决:
方法一:结束占用80端口的服务
使用 netstat -natp | grep :80
命令,查看80端口 被哪个服务占用
然后使用 kill pid号 ,结束占用80端口的进程
方法二:修改nginx服务端口
vim /usr/local/nginx/conf/nginx.conf listen 800;
#重启或者重新加载配置文件 systemctl reload nginx 或者 systemctl restart nginx netstat -natp | grep nginx
这篇关于源码安装Nginx的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-13用Nginx防范DDoS攻击的那些事儿
- 2024-12-13用Terraform在AWS上搭建简单NGINX服务器指南
- 2024-10-29Nginx发布学习:从入门到实践的简单教程
- 2024-10-28Nginx发布:新手入门教程
- 2024-10-21nginx 怎么设置文件上传最大20M限制-icode9专业技术文章分享
- 2024-10-17关闭 nginx的命令是什么?-icode9专业技术文章分享
- 2024-09-17Nginx实用篇:实现负载均衡、限流与动静分离
- 2024-08-21宝塔nginx新增8022端口方法步骤-icode9专业技术文章分享
- 2024-08-21nginx配置,让ws升级为wss访问的方法步骤-icode9专业技术文章分享
- 2024-08-15nginx ws代理配置方法步骤-icode9专业技术文章分享