赞
踩
目录
以Nginx开源版为例,进行演示
安装包下载地址:http://nginx.org/
进入后下载对应的即可。下载速度还是很快的,本身文件就不大。下载完成直接解压就行。
至于windows版本的,直接双击运行nginx.exe文件即可启动。
然后访问本机的80端口即可。
如果出现访问不了的情况,可以检查一下防火墙,或者以管理员权限运行。
window版本使用太简单了,这里一笔带过了。
将压缩包(nginx-1.21.6.tar.gz)放在任意指定的linux目录下,如/root
解压缩文件(解压到当前路径)
tar -zxvf nginx-1.21.6.tar.gz
备注:
也可以解压缩到指定目录,比如
tar -zxvf nginx-1.21.6.tar.gz -C /usr/local/nginx
前提是/usr/local/nginx路径要存在,所以可以提前创建相应文件夹,比如在/usr/local目录下 mkdir nginx ,创建nginx文件夹
然后进入解压后的安装包中,准备编译安装
cd /root/nginx-1.21.6
编译安装到指定路径下,此路径不写也是默认安装到这里
./configure --prefix=/usr/local/nginx
make
make install
如果出现警告或报错
(一)提示
checking for OS Linux 3.10.0-693.el7.x86_64 x86_64 checking for C compiler ... not found ./configure: error: C compiler cc is not found安装gcc,c语言编译器
yum install -y gcc
-y 表示不提示直接进行安装
(二)提示
./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using --without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using --with-pcre=<path> option.安装perl库
yum install -y pcre pcre-deve
(三)提示
./configure: error: the HTTP gzip module requires the zlib library. You can either disable the module by using --without-http_gzip_module option, or install the zlib library into the system, or build the zlib library statically from the source with nginx by using --with-zlib=<path> option.安装zlib库
yum install -y zlib zlib-devel
接下来再执行
make
make install
进入安装好的目录 /usr/local/nginx/sbin,然后执行下面对应的方法即可启动、停止等
- ./nginx 启动
- ./nginx -s stop 快速停止
- ./nginx -s quit 优雅关闭,在退出前完成已经接受的连接请求
- ./nginx -s reload 重新加载配置
关闭防火墙
systemctl stop firewalld.service
禁止防火墙开机启动
systemctl disable firewalld.service
ok,这样就不用担心访问不到服务了。当然了,如果你不想关闭防火墙,也可以放行80端口,这样也能访问到nginx。
放行端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
重启防火墙
firewall-cmd --reload
每次重启系统或者停止Nginx后,如果要重启Nginx,需要进入Nginx的安装目录,执行对应的指令。这样做如果你觉得麻烦,也可以将Nginx配置环境变量,然后就可以再任意地方执行它的命令了。
或者还有一种方式,就是将Nginx安装成为Linux的系统服务。这样更简洁了。
具体方法如下:
创建服务脚本,该路径下都是系统级的服务
vi /usr/lib/systemd/system/nginx.service
服务脚本内容:
- [Unit]
- Description=nginx - web server
- After=network.target remote-fs.target nss-lookup.target
- [Service]
- Type=forking
- PIDFile=/usr/local/nginx/logs/nginx.pid
- ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
- ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
- ExecReload=/usr/local/nginx/sbin/nginx -s reload
- ExecStop=/usr/local/nginx/sbin/nginx -s stop
- ExecQuit=/usr/local/nginx/sbin/nginx -s quit
- PrivateTmp=true
-
- [Install]
- WantedBy=multi-user.target
重新加载系统服务
systemctl daemon-reload
这样就搞定了,然后我们可以通过systemctl命令来启动停止Nginx了。
启动服务
systemctl start nginx.service
开机自启动
systemctl enable nginx.service
ps -ef | grep nginx
/usr/sbin/nginx -s stop
查看端口占用情况:
netstat -lntp
whereis nginx
查看Nginx相关文件:
find查找相关文件
find / -name nginx
依次删除find查找到的所有目录:
rm -rf /usr/sbin/nginx
yum remove nginx
ok Nginx 卸载完成!
其实学过Docker就很简单了
拉取nginx镜像,具体的版本好可以取dockerhub官网查看。不写版本号默认最新版本
docker pull nginx:1.22.1
运行一个nginx容器:
docker run --name some-nginx -d -p 8080:80 some-content-nginx
ok,这样就启动起来了。
但是,我们需要修改配置文件的话,还得进入容器内部,不太方便,所以我们一般会在运行容器的时候选择将容器内的一些目录挂载到宿主机上。
因为不同的docker容器,它的映射内部端口号、以及内部的结构这些,你不熟悉的话大概率是不知道的,所以最好的方法也是取dockerhub下面查看如何运行。
下面可以先停止掉当前容器并删除,然后我们重新进行挂在运行。
当然你也可以选择不删除(这里不演示此方法的后续操作)。
在运行之前记得先创建一下文件,否则直接生成会生成文件夹
touch /mydata/mynginx/conf/nginx.conf
- docker run -d \
- --name mynginx \
- -p 80:80 \
- -v /mydata/mynginx/html:/usr/share/nginx/html \
- -v /mydata/mynginx/conf/nginx.conf:/etc/nginx/nginx.conf \
- nginx:1.22.1
这个时候你发现根本无法访问,而且你通过docker ps
命令发现容器根本没有启动起来。即使再docker start mynginx
也无法启动
这是怎么回事呢?
其实这种问题很常见,原因就是:我们不是使用的后台运行命令嘛(-d),而要使用后台运行就必须有一个前台进程。因为没有前台进程,所以就会自动停止。
那为什么会没有前台进程呢?其实就是因为我们选择将容器内部的文件挂载出来,导致了容器内部没有了该文件。
所以我们需要在宿主机的挂在路径上添加上对应的文件。这个文件你可以去官网下载对应的压缩包,然后解压出来,然后上传到服务器对应的挂在目录即可。
然后我们再docker start mynginx
即可运行成功。
但是可能报错404,原因是我们一股脑的直接复制过来了。没有修改配置文件。
因为nginx.conf配置文件中80端口下的资源路径root根目录写的是相对位置的html。
由于挂载的原因,导致可能无法识别,所以一定要写容器内部nginx是全路径。
不能写宿主机的挂载路径。因为我们nginx是按照在容器的,这些配置都是在容器中的。server_name为localhost表示的是容器的位置,不上宿主机的位置。
只不过我们启动容器的时候将它映射到宿主机的端口了而已。
其实要懂这部分,最好是系统学习Nginx。
我们还是像之前一样通过docker的方式运行我们的web项目
至于怎么将web项目做成docker镜像可以去看docker镜像相关的讲解笔记。这里不详细阐述。
或者我们直接将打包好的jar包丢到服务器上,然后直接java -jar的方式运行也是可以的。
比如这里我们就生成好了一个springboot项目的docker容器并且启动运行了。对外暴露的端口是3800。
我们通过3800端口即可访问到该项目。实际在公网服务器中,我们是需要开放3800端口才可以访问到的。虚拟机中也一样,这里我们是关闭了防火墙。所以任何端口都能开放。
我们使用了nginx,目的就是希望访问都打到nginx服务器上,通过nginx反向代理到我们的服务器地址3800,以达到更好的访问效果。所以实际开发中,并不会暴露真实的后端接口。
下面开整,核心就在配置文件。我将原本注释的直接删掉了。
- worker_processes 2;
-
- events {
- worker_connections 1024;
- }
-
- http {
- include mime.types;
- default_type application/octet-stream;
-
- sendfile on;
-
- keepalive_timeout 65;
-
- server {
- listen 80;
- server_name localhost;
-
- location / {
- proxy_pass http://192.168.17.110:3800;
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。