使用源码的方式安装nginx,可以加深对linux目录的理解,今天就来放弃yum.. rpm.. dnf.. 这些在linux下较为“傻瓜”的操作方式,实战源码编译的方式安装nginx! 准备工作 准备nginx源码包:
准备nginx源码包:
yum install gcc-c++
安装完成:
用上传工具将安装包拷贝到Home的任意目录下
将这几个文件拷贝至/usr目录下:
sudo cp openssl-3.0.2.tar.gz /usr/
sudo cp pcre-8.45.tar.gz /usr/
sudo cp zlib-1.2.11.tar.gz /usr/
sudo cp nginx-1.20.2.tar.gz /usr/
安装openssl-3.0.2:
回到/usr目录下运行:
sudo tar -zxvf openssl-3.0.2.tar.gz
cd openssl-3.0.2
sudo ./config
sudo make && make install
如果出现 Can't locate IPC/Cmd.pm 这样的错误如下图
则根据这篇文章安装相关模块
安装pcre-8.45:
回到/usr目录下运行:
sudo tar -zxvf pcre-8.45.tar.gz
cd pcre-8.45
sudo ./configure
sudo make && make install
安装zlib-1.2.11:
回到/usr目录下运行:
sudo tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
sudo ./configure
sudo make && make install
安装nginx
回到/usr目录下运行:
sudo tar zxvf nginx-1.20.2.tar.gz
cd nginx-1.8.0
sudo ./configure
configure的时候会验证安装环境,若依赖包环境安装不全则可能出现如下错误
通过所有检测:
运行:
sudo make && make install
等待编译完成,运行whereis查看nginx安装目录:
运行下面语句,将执行二进制软链接到/usr/sbin/nginx目录下:
sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
安装成功
将nginx写入系统服务运行下面语句在 /usr/lib/systemd/system/目录下建立服务描述文件nginx.service:
vi /usr/lib/systemd/system/nginx.service
输入下面内容并保存
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true
[Install]
WantedBy=multi-user.target
运行如下命令,重新加载配置文件和.service文件:
sudo systemctl daemon-reload
可以看到 服务已经被加载进来了
之后就可以启用服务或者添加到启动项了
sudo systemctl start nginx.service
sudo systemctl enable nginx.service
最后一步别忘了开启防火墙80端口的访问:
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload
成功启动:
Troubleshooting
1. 如果端口被占用,则无法运行nginx,默认nginx是通过80端口访问的,所以需要排查端口占用的程序:
netstat -tunlp
2. 如果systemd有报错,可以通过如下命令查看
sudo journalctl -fu nginx.service
3. 默认情况下日志记录在syslog,如果看报错详细,可以通过如下命令查看
sudo cat /var/log/messages
4. 如果有类似Can't open PID file /run/nginx.pid 这样的报错,需要修改nginx.service 中pid文件的路径为实际pid的路径,具体路径在nginx.conf中查看:
运行下面命令:
sudo vi /usr/lib/systemd/system/nginx.service
将ExecStartPre与PIDFile项改为如下:
ExecStartPre=/usr/bin/rm -f /usr/local/nginx/logs/nginx.pid
PIDFile=/usr/local/nginx/logs/nginx.pid
全文完