第二篇文章,安装nginx
文章目录
服务器安装nginx
之前使用阿里云的时候,是默认安装的,这次切换腾讯云发现已经安装好,所以如果你的服务器上已经安装,则忽略。
安装必备插件
首先得判断服务器上是否安装了gcc , openssl,pcre ,pcre-devel等库。
使用命令
gcc -v #查看服务器gcc版本
openssl version #查看openssl的版本
rpm -qa |grep pcre #查看系统中是否安装了pcre
如果没有安装这些插件,那么使用如下命令安装插件
#gcc是linux下的编译器
yum -y install gcc
#pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。
yum install -y pcre pcre-devel
#zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip
yum install -y zlib zlib-devel
#openssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔
yum install -y openssl openssl-devel
安装nginx
查看服务器上openssl的版本
使用命令
openssl version
因为openssl的版本和nginx的版本可能又不兼容的问题,或导致后来,nginx配置ssl证书的时候,编译报错。
我的openssl的版本是
OpenSSL 1.1.1g FIPS 21 Apr 2020
google了一下,应该安装nginx-1-17-9的版本
nginx的安装位置和编译/下载位置
我的服务器上根目录下有个develop文件夹,专门用来下载,编译相关的文件,但是linux安装的位置并不是这个位置。需要注意这点。
我的linux服务器中nginx的下载,编译位置是/develop
安装位置,系统默认/usr/local/nginx
如果你看完这篇文章后,觉得不方便,可以直接在/usr/local这个目录下新建nginx文件夹,然后直接操作
切换下载目录,下载nginx安装包并解压
cd /develop
wget http://nginx.org/download/nginx-1.17.9.tar.gz
tar -zxvf nginx-1.9.9.tar.gz
你可以看到下图中我的服务器上有两个nginx,其中nginx-1.9.9这个版本和openssl不兼容,所以重新下载新的。
编译nginx
首先我的nginx在服务器上的位置是 /develop/nginx-1.17.9
切换到这个目录下,开始执行下面的命令,进行编译
总共三条命令,有可能会有报错,那么报错和解决方案如下
第一条命令
--prefix=/usr/local/nginx --with-http_ssl_module --with-pcre
#运行后能看到下面第一张图和第二张图,代表这条命令执行成功
#如果报错 nginx error: the HTTP rewrite module requires the PCRE library
#那么文章最上面的插件,你没有安装,直接yum -y install pcre-devel 即可
第二条命令
make
#执行后,有可能报错
#src/core/ngx_murmurhash.c:37:11: 错误:this statement may fall through [-Werror=implicit-fallthrough=]
#错误如同下图,这个问题是将警告当成错误处理了
#解决方案
#找到nginx目录下的的objs目录。打开Makefile文件。去掉CFLAGS中的-Werror
#再重新make
# -Wall 表示打开gcc的所有警告
# -Werror,它要求gcc将所有的警告当成错误进行处理
make可能报错错误
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/ngx_murmurhash.o \
src/core/ngx_murmurhash.c
src/core/ngx_murmurhash.c: 在函数‘ngx_murmur_hash2’中:
src/core/ngx_murmurhash.c:37:11: 错误:this statement may fall through [-Werror=implicit-fallthrough=]
h ^= data[2] << 16;
~~^~~~~~~~~~~~~~~~
src/core/ngx_murmurhash.c:38:5: 附注:here
case 2:
^~~~
src/core/ngx_murmurhash.c:39:11: 错误:this statement may fall through [-Werror=implicit-fallthrough=]
h ^= data[1] << 8;
~~^~~~~~~~~~~~~~~
src/core/ngx_murmurhash.c:40:5: 附注:here
case 1:
^~~~
cc1:所有的警告都被当作是错误
make[1]: *** [objs/Makefile:445:objs/src/core/ngx_murmurhash.o] 错误 1
make[1]: 离开目录“/develop/nginx-1.9.9”
make: *** [Makefile:8:build] 错误 2
解决make的错误
vi Makefile #删除下图中的配置,保存即可
回到nginx的目录下,重新make,又出现一个新的错误,直接找到这个报错的文件,然后注释这行代码
src/os/unix/ngx_user.c: 在函数‘ngx_libc_crypt’中:
src/os/unix/ngx_user.c:36:7: 错误:‘struct crypt_data’没有名为‘current_salt’的成员
cd.current_salt[0] = ~salt[0];
pwd
# /develop/nginx-1.9.9/src/os/unix
vi ngx_user.c
#注释报错的这行代码,注释代码使用的是/* */来注释
重新回到nginx目录,编译make,看到第二张图即可
第三条命令
make install
添加nginx环境变量
最好将nginx配置到环境变量中,不然接下来,配置ssl证书的时候,
需要重启nginx,会报错:-bash: nginx: 未找到命令
修改/etc/profile
添加如下配置
# nginx exvironmenet
export PATH=$PATH:/usr/local/nginx/sbin
重新读取配置
source /etc/profile
主要nginx的命令如下
/usr/local/nginx/sbin/nginx 启动
/usr/local/nginx/sbin/nginx -s stop 停止
/usr/local/nginx/sbin/nginx -s reload 重新载入
/usr/local/nginx/sbin/nginx -v 查看版本
/usr/local/nginx/sbin/nginx -t 测试配置文件是否正常
修改nginx配置,主要是端口
#注意这一步,使用命令 whereis nginx,看nginx被安装到那个目录下了
#结果是/usr/local/nginx ,和下载,编译程序的目录不是同一个目录
#找到 nginx目录下的conf文件夹下的nginx.conf文件
默认的http,不需要修改这个配置文件,只需要保证你的腾讯云服务器中的安全组,打开了相应端口,如下
443 是ssl端口,用于https协议
我在这里http的端口是81
启动nginx
#还在这个目录下 /usr/local/nginx/sbin,开始启动nginx
nginx
直接访问你的IP,看到像下面这个网页即可