Linux 环境安装Nginx—源码和Dokcer两种安装方式

2024-03-29 23:20

本文主要是介绍Linux 环境安装Nginx—源码和Dokcer两种安装方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、源代码编译安装Nginx

1.下载最新nginx源码

以nginx-1.25.3.tar.gz为例:

可以使用命令(联网):curl -O http://nginx.org/download/nginx-1.25.3.tar.gz或在官网下载.tar.gz

2.解压缩

tar -zxvf nginx-1.25.3.tar.gz
cd nginx-1.25.3/

3.安装依赖模块

yum install pcre 
yum install pcre-devel

4.配置源代码

./configure
或  ./configure --without-http_gzip_module

5.编译

make

6.安装

make install

7.启动nginx

①切到nginx的sbin目录下输入:
启动:./nginx
加载:./nginx -s reload
或②/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

ps:关闭nginx:./nginx -s stop

或③执行启动脚本(./op_nginx.sh start)

#!/bin/sh
# ./op_nginx.sh start 启动 stop 停止 restart 重启 status 状态 monitor 监控(未启动->自动重启)APP_HOME=/usr/local/nginx
LOG_PATH=$APP_HOME/logs/$AppName.log
AppName2=nginx
AppName=/usr/local/nginx/sbin/nginx
opUser=root
RE_LOG_HOME=/home/data/monitorlog/crontab
RE_LOG_FILE=$RE_LOG_HOME/$(date +%F)/$(date +%F)_restart.txt
STATE_HOME=/home/data/monitorlog/component-status
STATE_FILE=$STATE_HOME/$AppName2#variable
##nginx安装路径
nginx_path=/usr/local/nginx
##nginx脚本启动路径
nginxd=$nginx_path/sbin/nginx
##nginx服务启动后存放PID的文件
nginx_pid_file=$nginx_path/logs/nginx.pidif [ `whoami` != "$opUser" ];thenecho -e " only $opUser can run me"exit 1
fiif [ "$1" = "" ];
thenecho -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status|monitor} \033[0m"exit 1
fiif [ "$AppName" = "" ];
thenecho -e "\033[0;31m 未输入应用名 \033[0m"exit 1
fiif [ ! -d "$RE_LOG_HOME/$(date +%F)/" ];
thenmkdir $RE_LOG_HOME/$(date +%F)
fi#调用shell的函数库
if [ -f /etc/init.d/functions ];then. /etc/init.d/functions
elseecho "not find file:/etc/init.d/functions"eixt 1
fi#对nginx PID脚本文件进行判断
if [ -f $nginx_pid_file ];thenpid=`cat $nginx_pid_file`nginx_process_num=`ps -ef  | grep $pid | grep -v "grep" | wc -l`
fi#函数部分
##Nginx的启动函数
start () {
##如果nginx启动则报错
if [ -f $nginx_pid_file ] && [ $nginx_process_num -ne 0 ];thenecho "Nginx服务已经启动"
else
##如果pid文件存在,但是没有进程,说明上一次非法关闭了nginx,造成pid文件没有自动删除,所以启动nginx之前先删除旧的pid文件if [ -f $nginx_pid_file ] && [ $nginx_process_num -eq 0 ];thenrm -f $nginx_pid_fileaction "nginx start" $nginxdfiaction "nginx start" $nginxd
fi
}##Nginx关闭函数
stop () {
##如果Nginx服务没有启动,则提示服务没有启动
if [ -f $nginx_pid_file ] && [ $nginx_process_num -eq 0 ];thenecho "Nginx服务没有启动"exit 2
elseaction "nginx stop" killall -s QUIT nginxrm -f $nginx_pid_file
fi
}##Nginx重启函数
restart () {
stop
sleep 1
start
if [ $? -eq 0 ];thenaction "nginx 重启完成"
fi
}##重新读取配置文件,不会更改pid
reload () {
if [ -f $nginx_pid_file ] && [ $nginx_process_num -ne 0 ];thenaction "nginx reload" killall -s HUP nginx
elseecho "Nginx没有启动"
fi
}##查看Nginx启动状态
status () {
tmp=`mktemp nginx.XXXX`
curl -s -I 127.0.0.1 1> $tmp
#curl -I 127.0.0.1 > $tmp &>/dev/null
sed -i "s/\r//" $tmp
val=`grep "HTTP" $tmp | cut -d ' ' -f3`
if [ "$val" == "OK" ];thenecho "Nginx start"
elseecho "Nginx stop"
fi
rm -f $tmp
}function monitor()
{PID=`ps -ef |grep java|grep $AppName2|grep -v grep|wc -l`if [ $PID != 0 ];thenecho "$AppName2 is running..."echo $(date +%Y-%m-%d%n%H:%M:%S)_running > $STATE_FILEelsestartecho "$AppName2 is not running,and restarting..."# 重启保存到日志echo $(date +%Y-%m-%d%n%H:%M:%S)_notrunning > $STATE_FILEecho $(date +%Y-%m-%d%n%H:%M:%S) >> $RE_LOG_HOME/$(date +%F)/$(date +%F)_restart.txtecho "$AppName is not running,and restarting..." >> $RE_LOG_HOME/$(date +%F)/$(date +%F)_restart.txtfi
}case $1 instart)start;;stop)stop;;restart)restart;;status)status;;monitor)monitor;;*)
esac
8.浏览器访问

ps:防火墙开放端口

如下表示成功。

二、Docker安装Nginx(确保已安装Docker)

1.nginx.conf
#user  nobody;
worker_processes  4;error_log   /usr/local/nginx/logs/error.log;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#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;client_max_body_size 200m;client_header_buffer_size 10k;large_client_header_buffers 20 10k;access_log /usr/local/nginx/logs/access.log ;sendfile        on;#tcp_nopush      on;keepalive_timeout  65;keepalive_requests 100000;#gzip  on;upstream server_list {server IP地址1:端口;server P地址2:端口;} server {listen       8080;server_name  域名或ip地址;charset utf-8;access_log  /usr/local/nginx/logs/host.access.log;#对 / 所有做负载均衡+反向代理location / {# root   html;# index  index.html index.htm;proxy_pass http://server_list;proxy_redirect off;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_read_timeout 300;proxy_send_timeout 300;proxy_connect_timeout 300;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}
2.nginx镜像上传到服务器

2.1访问 dockerhub 查找所需的镜像版本并下载(docker pull nginx)

2.2上传镜像

ps:确保nginx安装目录中有如下内容:

3.nginx安装脚本

在服务器上安装和启动(install_nginx.sh)

#!/bin/bash##########################
# nginx-docker 安装脚本 #
##########################WORK_PATH=/home/data/install_pkg
PKG_PATH=$WORK_PATH/nginx#检查安装目录
if [ ! -d $PKG_PATH ];
thenecho -e "${PKG_PATH} 缺失,结束进程"exit 1
fi#docker 导入tar包
docker load < $PKG_PATH/nginx-1.25.3.tar#新建nginx目录 注册配置文件
mkdir -p /home/data/nginx
cd /home/data/nginx
cp -rf $PKG_PATH/nginx.conf ./#docker启动nginx
docker run -d --restart always \-p 9001:80 \--name nginx \-v /home/data/nginx/nginx.conf:/etc/nginx/nginx.conf \-v /home/data/nginx/conf.d:/etc/nginx/conf.d \-v /home/data/nginx/html:nginx:/usr/share/nginx/html \nginx:1.25.3echo nginx installed.
docker ps | grep nginx

-v:挂载配置文件、html 目录到宿主机;冒号前为宿主机文件路径,冒号后为挂载到容器中的路径  

三、nginx配置注意事项

1.配置nginx.service(即配置systemctl启动服务

使用源码安装nginx的,可以添加该配置并放到/usr/lib/systemd/system

[Unit]
Description=nginx service
After=network.target[Service]
Type=forking
#PIDFile=/var/run/nginx.pid #nginx.conf设置pid位置
ExecStart=/usr/local/nginx/sbin/nginx  #启动命令
ExecReload=/usr/local/nginx/sbin/nginx -s reload  #重启命令
ExecStop=/usr/local/nginx/sbin/nginx -s quit      #停止命令
PrivateTmp=true[Install]
WantedBy=multi-user.target

2.导入3万条数据会报如下错误,因为nginx请求体默认是1m

可在nginx.conf中加上client_max_body_size 10m;

这篇关于Linux 环境安装Nginx—源码和Dokcer两种安装方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/859921

相关文章

从零教你安装pytorch并在pycharm中使用

《从零教你安装pytorch并在pycharm中使用》本文详细介绍了如何使用Anaconda包管理工具创建虚拟环境,并安装CUDA加速平台和PyTorch库,同时在PyCharm中配置和使用PyTor... 目录背景介绍安装Anaconda安装CUDA安装pytorch报错解决——fbgemm.dll连接p

linux打包解压命令方式

《linux打包解压命令方式》文章介绍了Linux系统中常用的打包和解压命令,包括tar和zip,使用tar命令可以创建和解压tar格式的归档文件,使用zip命令可以创建和解压zip格式的压缩文件,每... 目录Lijavascriptnux 打包和解压命令打包命令解压命令总结linux 打包和解压命令打

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

linux如何复制文件夹并重命名

《linux如何复制文件夹并重命名》在Linux系统中,复制文件夹并重命名可以通过使用“cp”和“mv”命令来实现,使用“cp-r”命令可以递归复制整个文件夹及其子文件夹和文件,而使用“mv”命令可以... 目录linux复制文件夹并重命名我们需要使用“cp”命令来复制文件夹我们还可以结合使用“mv”命令总

Python中常用的四种取整方式分享

《Python中常用的四种取整方式分享》在数据处理和数值计算中,取整操作是非常常见的需求,Python提供了多种取整方式,本文为大家整理了四种常用的方法,希望对大家有所帮助... 目录引言向零取整(Truncate)向下取整(Floor)向上取整(Ceil)四舍五入(Round)四种取整方式的对比综合示例应

关于Nginx跨域问题及解决方案(CORS)

《关于Nginx跨域问题及解决方案(CORS)》文章主要介绍了跨域资源共享(CORS)机制及其在现代Web开发中的重要性,通过Nginx,可以简单地解决跨域问题,适合新手学习和应用,文章详细讲解了CO... 目录一、概述二、什么是 CORS?三、常见的跨域场景四、Nginx 如何解决 CORS 问题?五、基

python安装whl包并解决依赖关系的实现

《python安装whl包并解决依赖关系的实现》本文主要介绍了python安装whl包并解决依赖关系的实现,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、什么是whl文件?二、我们为什么需要使用whl文件来安装python库?三、我们应该去哪儿下

MySQL安装时initializing database失败的问题解决

《MySQL安装时initializingdatabase失败的问题解决》本文主要介绍了MySQL安装时initializingdatabase失败的问题解决,文中通过图文介绍的非常详细,对大家的学... 目录问题页面:解决方法:问题页面:解决方法:1.勾选红框中的选项:2.将下图红框中全部改为英

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

MySQL9.0默认路径安装下重置root密码

《MySQL9.0默认路径安装下重置root密码》本文主要介绍了MySQL9.0默认路径安装下重置root密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录问题描述环境描述解决方法正常模式下修改密码报错原因问题描述mysqlChina编程采用默认安装路径,