首页 > 系统相关 >02.Nginx的安装与Dockerfile的编写

02.Nginx的安装与Dockerfile的编写

时间:2024-07-31 22:31:20浏览次数:15  
标签:02 http temp nginx -- Nginx var path Dockerfile

获取nginx安装包

地址:https://nginx.org/en/download.html

Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
Stable version:最新稳定版,生产环境上建议使用的版本
Legacy versions:遗留的老版本的稳定版

我们下载linux上的安装包 tar.gz 结尾的,右键复制链接即可,linux上无需下载安装包再上传,直接使用wget命令获取解压即可

image-20240731221721353

下载并解压

# 此处我们使用组合命令直接下载并解压(当然可以分两步,直接一条命令敲出来比较装13,23333)
# -qO-:wget 参数,表示静默模式下载并将输出发送到标准输出(stdout)
# tar -xz:tar 参数,-x 表示解压,-z 表示使用 gzip 解压,-C 表示指定解压的目标目录。
wget -qO- https://nginx.org/download/nginx-1.26.1.tar.gz | tar -xz -C /usr/local

安装nginx所必须软件

1 PERE

PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。

nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。

注:pcre-devel是使用pcre开发的一个二次开发库。nginx****也需要此库

2 zlib

zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。

3 openssl

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,

并提供丰富的应用程序供测试或其它目的使用。

nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

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

编译nginx

配置makefile

进入nginx解压目录,/usr/local/nginx-1.26.1,nginx目录根据下载版本不同而不同,使用nginx目录中的configure命令创建一个makefile文件,手动编译过gcc的同学可能比较熟悉这个,不熟悉也可以了解一下linux系统上手动编译都需要用到这个命令,执行如下命令开始设定nginx编译前的配置:

# 当前目录为:/usr/local/nginx-1.26.1
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-file-aio \
--with-http_realip_module \
--with-http_v2_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-mail \
--with-mail_ssl_module

上述配置的大致意义如下:

--prefix=/usr/local/nginx

  • 设置 Nginx 的安装目录为 /usr/local/nginx

--pid-path=/var/run/nginx/nginx.pid

  • 设置 PID 文件的路径为 /var/run/nginx/nginx.pid,PID 文件用于存储 Nginx 进程的 ID。

--lock-path=/var/lock/nginx.lock

  • 设置锁文件的路径为 /var/lock/nginx.lock

--error-log-path=/var/log/nginx/error.log

  • 设置错误日志文件的路径为 /var/log/nginx/error.log

--http-log-path=/var/log/nginx/access.log

  • 设置访问日志文件的路径为 /var/log/nginx/access.log

--with-http_gzip_static_module

  • 启用 HTTP Gzip 静态模块,用于发送预先压缩的 .gz 文件。

--http-client-body-temp-path=/var/temp/nginx/client

  • 设置 HTTP 客户端请求体临时文件的存储路径为 /var/temp/nginx/client

--http-proxy-temp-path=/var/temp/nginx/proxy

  • 设置 HTTP 代理临时文件的存储路径为 /var/temp/nginx/proxy

--http-fastcgi-temp-path=/var/temp/nginx/fastcgi

  • 设置 FastCGI 临时文件的存储路径为 /var/temp/nginx/fastcgi

--http-uwsgi-temp-path=/var/temp/nginx/uwsgi

  • 设置 uWSGI 临时文件的存储路径为 /var/temp/nginx/uwsgi

--http-scgi-temp-path=/var/temp/nginx/scgi

  • 设置 SCGI 临时文件的存储路径为 /var/temp/nginx/scgi

--with-http_stub_status_module

  • 启用 HTTP stub status 模块,用于提供基本的状态信息。

--with-http_ssl_module

  • 启用 HTTP SSL 模块,用于支持 HTTPS。

--with-file-aio

  • 启用文件异步 I/O 支持。

--with-http_realip_module

  • 启用 HTTP Real IP 模块,用于将客户端的 IP 地址更改为请求头中的值(如通过代理或负载均衡器)。

--with-http_v2_module

  • 启用 HTTP/2 模块,用于支持 HTTP/2 协议。

--with-pcre

  • 启用 PCRE(Perl 兼容正则表达式库)支持,用于支持正则表达式。

--with-stream

  • 启用 Stream 模块,用于处理 TCP/UDP 流。

--with-stream_ssl_module

  • 启用 Stream SSL 模块,用于为 Stream 提供 SSL/TLS 支持。

--with-mail

  • 启用邮件代理模块,用于支持 SMTP、IMAP 和 POP3 协议。

--with-mail_ssl_module

  • 启用邮件 SSL 模块,为邮件代理提供 SSL/TLS 支持。

当出现如下界面时即配置完成:

image-20240731212027267

编译

检查是否成功在当前目录生成Makefile文件

image-20240731212142844

创建nginx临时目录和nginx目录

# 当前目录为:/usr/local/nginx-1.26.1
# 此处创建的目录和上面配置的nginx临时目录一致
mkdir -p  /var/temp/nginx

开始编译

# 当前目录为:/usr/local/nginx-1.26.1
# 提示make命令没有就直接使用yum命令安装 yum -y install make
make

当出现如下图的内容时说明命令顺利执行啦,don't worry,这不是报错

image-20240731212936366

继续执行下一步命令开始安装nginx,这里不需要再次执行安装路径,创建makefile文件的时候已经指定了。

# 当前目录为:/usr/local/nginx-1.26.1
make install

启动nginx

进入nginx安装目录 /usr/local/nginx,执行sbin目录下的nginx启动脚本

# 当前目录为:/usr/local/nginx/sbin
./nginx
# 检查nginx是否启动成功,已经出现nginx进程,nginx安装成功
ps -ewwf | grep nginx
root      3444     1  0 13:33 ?        00:00:00 nginx: master process ./nginx
nobody    3445  3444  0 13:33 ?        00:00:00 nginx: worker process
root      3447     1  0 13:33 pts/0    00:00:00 grep --color=auto nginx
# 关闭nginx
# ./nginx -s stop 或 ./nginx -s quit
# 刷新配置文件
# ./nginx -s reload

配置外部访问

配置防火墙策略,开放防火墙nginx端口

# 当前目录为 /usr/local/nginx/sbin
# 注:如果提示没有iptables命令可以使用yum命令安装即可,其他版本系统也有对应的防火墙工具,自行百度开发端口即可,嫌麻烦可以直接把防火墙关闭(自己玩可以,生产环境务必不要这样玩)
iptables -I INPUT -p tcp --dport 80 -j ACCEPT

Dockerfile版本

FROM centos:latest
RUN mkdir -p  /etc/yum.repos.d/bak && \
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak  && \
curl -o /etc/yum.repos.d/CentOS-Base-Aliyun.repo http://mirrors.aliyun.com/repo/Centos-8.repo && \
yum clean all && yum makecache
RUN sed -i "5i\alias ll=\'ls -l\'" /root/.bashrc && source /root/.bashrc
RUN yum install -y ncurses wget && wget -qO- https://nginx.org/download/nginx-1.26.1.tar.gz | tar -xz -C /usr/local && \
yum install -y  gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel make && cd /usr/local/nginx-1.26.1 && \
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-file-aio \
--with-http_realip_module \
--with-http_v2_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-mail \
--with-mail_ssl_module && \
mkdir -p  /var/temp/nginx && make && make install && ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx
EXPOSE 80
CMD ["nginx","-g","daemon off;"]

构建Dockerfile镜像

# 进入Dockerfile文件所在目录 
# 开始构建 -t之后指定的时镜像名和tag
docker build -t image:test .

运行镜像

# 此处必须采用后台运行才可以启动nginx
docker run -d -p 80:80 --name nginx-demo image:test

启动成功之后使用 docker ps 查看容器是否成功启动(避免使用-it启动容器直接退出而不知道)

docker ps
CONTAINER ID   IMAGE                COMMAND                   CREATED         STATUS         PORTS                                                                              NAMES
66934d164c31   image:test           "nginx -g 'daemon of…"   4 minutes ago   Up 4 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp                                                  nginx-demo

本地访问nginx主页,本机ip为 192.168.31.30,映射到主机的端口为80,所以我们在本地访问192.168.31.30:80(实际ip请根据docker容器所在宿主机的ip来访问)

image-20240731221550109

访问成功!!撒花~!

参考

标签:02,http,temp,nginx,--,Nginx,var,path,Dockerfile
From: https://www.cnblogs.com/code9xs/p/18335618

相关文章

  • 2024 (ICPC) Jiangxi Provincial 省赛
    2024(ICPC)JiangxiProvincial省赛前言和队友vp7t,赛后补了几题。A.MaliangLearningPainting思路输出a+b+c代码cin>>n>>m>>k;cout<<n+m+k<<endl;C.Liar思路队友写得代码voidsolve(){intn,k;cin>>n>>k;intans=0;......
  • [JOI 2020 Final] 火事 题解
    给一篇题解。(下面这张图是从luogu上粘贴的,因为不太会画图)其中纵坐标为\(t\),横坐标为\(a_i\)。发现同颜色块只有平行四边形和直角梯形(等腰直角三角形)两种情况。可以将直角梯形削去左下角,分成两部分考虑。等直可以直接暴力插入区间,总个数\(O(n)\)。平行四边形可以看作上......
  • 2021年我因为Tab Session Manager丢失数据,好像是研究过一次leveldb的查看/解码方式 但
    Default\LocalStorage\leveldb.ldb 2023年下半年我因为chatmindai修改域名,又研究过一次,因为时间关系也没有细究 最近,我想查看一下anki的devtool的LocalStorage,即https://ankiweb.net/shared/info/31746032这个插件产生的C:\Users\xxx\AppData\Local\Anki\QtWebEngine\De......
  • HDU2024 R2 T9 题解
    考虑维护一下每个点的速度。把区间加拆成后缀加和后缀减,然后考虑后缀加。减就同理。考虑在一段后缀的目标速度增加之后,哪些时刻的加速度会变化。这里加速度必然只会变大\(1\),因此在这个时刻之后的速度都会增加\(1\),又由于目标速度也增加了\(1\),所以这个位置之后的加速度都不再......
  • 2024 (ICPC) Jiangxi Provincial Contest -- Official Contest
    D.MagicLCM\(1.当我们在模拟样例1时,我们发现当最后为1,2,2,10,20时和最大\)\(模拟样例3时,我们发现当最后为,1,1,6,6,36,540时和是最大\)\(样例2无需修改加起来就是最大的。\)\(2.我们发现,最后的序列每一个数都是后面的质因子,那么本质上,求最大的和,就是\)\(移动这些质因子幂数(比如......
  • 坐牢二十天 20240731(IO)
    一.作业1>使用父子进程完成两个文件的拷贝父进程拷贝前一半内容,子进程拷贝后一半内容子进程结束后退出,父进程回收子进程的资源#include<myhead.h>//定义求源文件长度的函数intlenmain(constchar*src,constchar*dst){intfd1=0;//源文件intfd2=0;//目......
  • 2024暑假集训测试16
    前言比赛链接。真是一次比一次唐了。被莫反害惨了属于是(其实完全是自己唐吧),T1狂推莫反不止,一直想着怎么处理\(999\)的限制,最后推出来了复杂度是\(999\sqrtn\)的,过不去,继续唐我的高级分块套分块做法,比赛快结束了才发现正因为那个限制所以我直接枚举就行了,丫的最后少了......
  • Visual Studio 2022 WinForm/Wpf打包安装程序
     VisualStudio2022WinForm/Wpf打包安装程序1.安装扩展程序2.创建并设置用于打包安装程序的项目2.1新建SetupProject项目2.2添加需要打包的应用程序文件2.3添加项目主程序2.3添加主程序的桌面和任务栏快捷方式2.5添加卸载程序2.6添加卸载程序快捷方式2.7......
  • VS2022 C# 按F12 默认跳转到[反编译]修改为[从元数据]的设置
    1.当光标选中Timer,按F12]如下图默认跳转为Timer[反编译 ]如下图 2.想要跳转到Timer[从元数据],设置如下,【工具】->[选项]->[文本编辑器]->[C#]->[高级]->取消勾选[支持导航到反编译源码]->[确认] 3.再次在光标选中Timer,按F12跳转结果是Timer[从元数据]如下: 4.点击前面......
  • 从嘉手札<2024-7-31>
    倪海夏短解《易经》1、知其不可奈何,而安之若命。心若有所往,何惧道阻且长。无能为力的时候人总是会讲顺其自然,来敷衍自己的不作为和怯懦,来掩盖路上的坎坷荆棘。可事实上真正的顺其自然是竭尽所能之后对结果不强求,凡事有胜败,若是一味追求结果往往会堕入功利的陷阱,尽其力而不能至者......