源码安装 nginx 并设置为 service
官方下载地址
http://nginx.org/en/download.html
我选择安装 1.20.1
官方安装文档
http://nginx.org/en/docs/configure.html
问题和目标
- 之前服务器上都是直接 apt install nginx ,版本 1.14
- nginx 程序已包含 http_realip_module 模块,网站转发可以获取到客户端实际 IP
- 后来使用 nginx 的 Stream 模块作为 ssh/rdp 端口转发,无法转发客户端实际 IP ,内网服务器查看 log 看到的都是nginx转发服务器的内网地址
- 需要 stream_realip_module 模块支持
所以,只能源码重新编译后,替换 apt install 的 nginx 程序 - 必须保持原来的配置和环境,不能简单粗暴的再装一个新的 nginx
- 练习可以随意折腾,实际环境务必一次成功!
练习环境 :
- 虚拟机 Ubuntu 20.04 Server
- 再找一个使用 apt install nginx 的同类服务器,用于对照、复制后续设置 文件
下载
下载链接
$ wget http://103.78.124.87/2Q2W33852EB623DB3C4CBAA9755060B20190FB888DDA_unknown_EAA1233D75F40EFB2E8191E4E17424732014EC5C_7/nginx.org/download/nginx-1.20.1.tar.gz
解压
$ tar -zxvf nginx-1.20.1
$ cd nginx-1.20.1/
$ lsauto CHANGES CHANGES.ru conf configure contrib html LICENSE Makefile man objs README src
其中, auto 目录存在许多自动脚本,暂时没有仔细研究
安装依赖
sudo apt install openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev make
编译、安装
先使用最简单方式,不带任何多余模块
初次练习,可能会多次重新编译、安装
后续再增加各种模块./configure --prefix=/opt/nginx
...Configuration summary+ using system PCRE library+ OpenSSL library is not used+ using system zlib library...nginx http uwsgi temporary files: "uwsgi_temp"nginx http scgi temporary files: "scgi_temp"
$ sudo make
$ sudo make install或者(注意后面的命令也要带上 sudo)
$ sudo make && sudo make install验证
$ nginx -vnginx version: nginx/1.20.1
$ nginx -t (实际需要 sudo)
nginx: [alert] could not open error log file: open() "/opt/nginx/logs/error.log" failed (13: Permission denied)nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok2021/08/24 16:09:44 [emerg] 2146#0: open() "/opt/nginx/logs/nginx.pid" failed (13: Permission denied)nginx: configuration file /opt/nginx/conf/nginx.conf test failed
$ cd /opt/nginx
$ lsclient_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
设置 nginx.service
service 定义文件
$ cd /lib/systemd/system
从另一个 apt install nginx 的服务器中同样目录下 cp 过来
$ sudo vim nginx.service
# After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends# SIGKILL to all the remaining processes in the process group (KillMode=mixed).## nginx signals reference doc:# http://nginx.org/en/docs/control.html#[Unit]Description=A high performance web server and a reverse proxy serverDocumentation=man:nginx(8)After=network.target[Service]Type=forking# wzh 20210824PIDFile=/run/nginx.pid# PIDFile=/opt/nginx/logs/nginx.pidExecStartPre=/opt/nginx/sbin/nginx -t -q -g 'daemon on; master_process on;'ExecStart=/opt/nginx/sbin/nginx -g 'daemon on; master_process on;'ExecReload=/opt/nginx/sbin/nginx -g 'daemon on; master_process on;' -s reloadExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pidTimeoutStopSec=5KillMode=mixed# wzh 20210824ExecStartPost=/bin/sleep 0.1[Install]WantedBy=multi-user.target
修改说明:
1). /usr/sbin/nginx 修改为当前的 /opt/nginx/sbin/nginx 目录
2). 增加一行 ExecStartPost=/bin/sleep 0.1
给 start 服务加上延迟,以免 服务 status 读取 PID 错误3). 修改 PIDFile=/run/nginx.pid
源码make install 之后 ,PIDFile=/opt/nginx/logs/nginx.pid(nginx -t 不加 sudo 就可以看到)
为了和 apt 安装方式一致,改为/run/nginx.pid4). 对应需要修改 conf/nginx.conf 中的 pid
$ cd /opt/nginx/conf
$ vim nginx.conf...#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;# wzh 20210824#pid logs/nginx.pid;pid /run/nginx.pid;...
service 启动脚本
$ cd /etc/init.d
同样从 apt方式 安装的服务器上 cp 过来这个 nginx 启动脚本
$ sudo vim nginx
文件内容太长,以下 2 处修改了路径
... # wzh 20210824# PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# DAEMON=/usr/sbin/nginxPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opr/nginx/sbinDAEMON=/opr/nginx/sbin/nginxNAME=nginxDESC=nginx...# Try to extract nginx pidfile# wzh 20210824 # PID=$(cat /etc/nginx/nginx.conf | grep -Ev '^\s*#' | awk 'BEGIN { RS="[;{}]" } { if ($1 == "pid") print $2 }' | head -n1)PID=$(cat /opt/nginx/conf/nginx.conf | grep -Ev '^\s*#' | awk 'BEGIN { RS="[;{}]" } { if ($1 == "pid") print $2 }' | head -n1)...
修改为可执行
$ sudo chmod 755 /etc/init.d/nginx重新加载 daemon 服务
$ sudo systemctl daemon-reload设置 nginx.service 开机启动
$ sudo systemctl enable nginx.service
$ sudo systemctl list-unit-files |grep nginx
nginx.service enabled enabled
测试
$ sudo nginx -t
nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is oknginx: configuration file /opt/nginx/conf/nginx.conf test is successful
$ sudo service nginx status
$ sudo service nginx restart
$ sudo service nginx reload
遇到的问题
Can’t open PID file /run/nginx.pid (yet?) after start: Operation not permitted
$ sudo service nginx status
...Aug 24 14:42:58 ubuntu2004-202 systemd[1]: Starting A high performance web server and a reverse proxy server...Aug 24 14:42:58 ubuntu2004-202 systemd[1]: nginx.service: Can't open PID file /run/nginx.pid (yet?) after start: Operation not permitted...
原因:
源码make install 之后 ,PIDFile=/opt/nginx/logs/nginx.pid
从 nginx -t 不加 sudo 就可以看到!解决方法:
修改 /opt/nginx/conf/nginx.conf 和 /lib/systemd/system/nginx.service 一致!
为了和 apt 安装方式一致,统一修改为 PIDFile=/run/nginx.pidFailed to parse PID from file /opt/nginx/logs/nginx.pid: Invalid argument
$ sudo service nginx status
...Aug 24 16:15:28 ubuntu2004-202 systemd[1]: Starting A high performance web server and a reverse proxy server...Aug 24 16:15:28 ubuntu2004-202 systemd[1]: nginx.service: Failed to parse PID from file /opt/nginx/logs/nginx.pid: Invalid argumentAug 24 16:15:28 ubuntu2004-202 systemd[1]: Started A high performance web server and a reverse proxy server.
原因:
服务 start 会有延迟,立刻获取服务的 status 时, PID 文件可能还没有产生
解决方法:
修改 /lib/systemd/system/nginx.service ,加上
ExecStartPost=/bin/sleep 0.1
源码安装 nginx 并设置为 service相关推荐
- linux access源码,从零开始学习Linux:Day04 源码安装Nginx 。acess/status/referer
从零开始学习Linux:Day04 源码安装Nginx .acess/status/referer 常见web服务器有IIS,apche,nginx,tomcat,tengine等等,现在nginx使 ...
- linux源码安装nginx
任务目标:源码安装nginx,作为web服务修改配置文件,让配置生效,验证配置 首先要去官网nginx.org下载一个tar包: tar xvf 解包 进入到解包出来的目录,对configure进行配 ...
- 源码安装nginx以及平滑升级
源码安装nginx以及平滑升级 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入:高级运维工程师之路 598432640 这个博客不方便上传软件包,我给大家把软件包放到百度云 ...
- mysql安装 张宴_Linux_centos5 源码安装Nginx + mysql + apache + php的方法,主要依照的是张宴的一篇博文 - phpStudy...
centos5 源码安装Nginx + mysql + apache + php的方法 主要依照的是张宴的一篇博文<http://blog.s135.com/post/366/>,安装的软 ...
- 基于centos5.8源码安装nginx之LNMP
LNMP 指的是什么呢,这里可以"望文生义",其是linux NGINX Mysql PHP的组合.每一种工具的安装都有其特长来吸引我们去使用它,对此就要了解其组合的各个工具 ...
- 源码安装nginx 1.23.1
先看看仓库们 yum list nginx* 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile bas ...
- linux 源码安装 Nginx
1.安装前环境准备 安装make: # yum -y install gcc automake autoconf libtool make 安装g++: # yum install gcc gcc-c ...
- linux下源码安装nginx
LNMP模式 后续继续更新,先搭建nginx 安装环境gcc gcc-c++ 2 下载源码包解压 配置第一个报错 安装openssl openssl-devel yum -y install open ...
- 源码包nginx 配置php,源码安装Nginx和PHP
1.安装编译环境 yum -yinstall gcc gcc-c++ automake autoconf libtool make glibc yum -y install libmcrypt-dev ...
- 测试CSDN的博客功能好不好用——YUM安装Nginx或源码安装Nginx
yum安装 # 安装openssl1.0.2只需要使用Ali的base库,如下 [root@CentOs1612 /etc]# cat <<EOF > /etc/yum.repos. ...
最新文章
- 西湖大学鞠峰组:环境宏病毒组学分析思路与常用工具
- mysql5.6.37驱动_MySql (mysql-5.6.37) 在Windows的安装及使用
- linux shell中的各种括号的使用方法
- C++ Primer 5th笔记(chap 16 模板和泛型编程)std::move
- 洛谷 P1494 [国家集训队]小Z的袜子
- Hystix熔断解决雪崩问题
- 高并发Redis缓存如何设计
- 三位数流水码的生成(000·····009··00A····00Z····ZZZ)
- Linux从用户层到内核层系列 - GNU系列之glibc介绍
- 查看电脑卸载mysql是否干净_如何把Mysql卸载干净(亲测有效)
- compute的c语言用法,词汇精选:compute的用法和辨析
- php生产环境配置,PHP生产环境配置 - osc_ifi9q17t的个人空间 - OSCHINA - 中文开源技术交流社区...
- java rrd_java利用rrd4j做服务监控的图片
- matlab教程黄金分割,Matlab程序设计在黄金分割法教学中的应用
- 暨南大学21考研计算机上岸吐槽贴经验贴流水账
- vue项目手机端适配
- Udacity Sparkify项目
- 需求调研过程管理小议
- 5G工业路由器出炉带来了哪些影响
- facetime 来电提醒_FaceTime应该比这更好
热门文章
- spring-data-slor 通配符的匹配很全面, 但无法找到元素 'solr:solr-server' 的声明。
- JAVA之列表集合ArrayList
- STM32(5)——通用定时器基本定时器
- 分享小知识:善用Group By排序
- 同一页面中加载两个相同的控件,结果只能出来一个,这是为什么
- 《大道至简》最后两章读后感
- DRILLNET 2.0------第八章 预防碰撞分析模型
- ((ios开发学习笔记 十二))Nib加载的方式实现自定义TableView
- jqgrid点击搜索无法重置参数问题
- Java实用知识记录 —— 截止到Java8