nginx make常见错误

nginx编译安装常见报错

编译nginx

[root@iZgt88z6l1kvd7Z nginx-1.10.1]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-pcre=…/pcre-8.39 --with-zlib=…/zlib-1.2.8
没有报错
然后我们make

[root@iZgt88z6l1kvd7Z nginx-1.10.1]# make
第一个报错就这样出来了_:
在这里插入图片描述

cc1: all warnings being treated as errors
make[1]: *** [objs/Makefile:473: objs/src/core/ngx_murmurhash.o] Error 1
make[1]: Leaving directory ‘/root/nginx-1.10.1‘
make: *** [Makefile:8: build] Error 2

分析原因:
是将警告当成了错误处理,打开 nginx的安装目录/objs/Makefile,去掉CFLAGS中的-Werror,再重新make
-Wall 表示打开gcc的所有警告
-Werror,它要求gcc将所有的警告当成错误进行处理

好的,第一个问题解决了,然后make又出现一个错误
src/os/unix/ngx_user.c: In function ‘ngx_libc_crypt’:
src/os/unix/ngx_user.c:36:7: error: ‘struct crypt_data’ has no member named ‘current_salt’
cd.current_salt[0] = ~salt[0];
^
make[1]: *** [objs/Makefile:774: objs/src/os/unix/ngx_user.o] Error 1
make[1]: Leaving directory ‘/root/nginx-1.10.1‘
make: *** [Makefile:8: build] Error 2
在这里插入图片描述

这里提示我们struct crypt_data’没有名为‘current_salt’的成员:cd.current_salt[0] = ~salt[0];
最好的办法是换一个版本,因为条件限制,我们就进到源码里把这行直接注释掉好了。
进入安装目录执行

 vim src/os/unix/ngx_user.c

/进去找到第36行,将cd .curr这一行注释起来
在这里插入图片描述
再编译就OK了
第三个错误openssl版本错误
src/event/ngx_event_openssl.c: In function ‘ngx_ssl_dhparam’:
src/event/ngx_event_openssl.c:954:11: error: dereferencing pointer to incomplete type ‘DH’ {aka ‘struct dh_st’}
dh->p = BN_bin2bn(dh1024_p, sizeof(dh1024_p), NULL);
^~
src/event/ngx_event_openssl.c: In function ‘ngx_ssl_connection_error’:
src/event/ngx_event_openssl.c:1941:21: error: ‘SSL_R_NO_CIPHERS_PASSED’ undeclared (first use in this function); did you mean ‘SSL_R_NO_CIPHERS_SPECIFIED’?
|| n == SSL_R_NO_CIPHERS_PASSED /* 182 */
^~~~~~~~~~~~~~~~~~~~~~~
SSL_R_NO_CIPHERS_SPECIFIED
src/event/ngx_event_openssl.c:1941:21: note: each undeclared identifier is reported only once for each function it appears in
make[1]: *** [objs/Makefile:816: objs/src/event/ngx_event_openssl.o] Error 1
make[1]: Leaving directory ‘/root/nginx-1.10.1‘
make: *** [Makefile:8: build] Error 2

原因:由于默认使用了openssl 1.1.x 版本,导致的API不一致引起
解决:
直接安装openssl1.0版本

wget http://www.openssl.org/source/openssl-1.1.0e.tar.gz //下载openssl
[root@iZgt88z6l1kvd7Z ~]# tar -zxvf openssl-1.1.0e.tar.gz //解压
[root@iZgt88z6l1kvd7Z ~]# cd openssl-1.1.0e/ &&./config shared zlib --prefix=/usr/local/openssl && make && make install 进入目录把openssl编译安装到 /usr/local/openssl 下
[root@iZgt88z6l1kvd7Z openssl-1.1.0e]# ./config -t
[root@iZgt88z6l1kvd7Z openssl-1.1.0e]# make depend //一种度makefile的规则,通过扫描仪个目录下的所有C\C++ 代码,从而判专断出文件之间的依赖关系,如a.cc文件中调用了b.h(如以形势include<b.h>),如果之后a.cc文件被改动,那 么只需要重新编属译a.cc文件,不需要编译b.h文件。否则所有的文件都需要重新编译。
[root@localhost openssl-1.1.0e]# cd /usr/local
[root@iZgt88z6l1kvd7Z local]# ln -s openssl ssl
[root@iZgt88z6l1kvd7Z local]# echo “/usr/local/openssl/lib” >>/etc/ld.so.conf
[root@iZgt88z6l1kvd7Z local]# cd -
/root/openssl-1.1.0e
[root@iZgt88z6l1kvd7Z openssl-1.1.0e]# ldconfig
[root@iZgt88z6l1kvd7Z openssl-1.1.0e]# echo KaTeX parse error: Expected 'EOF', got '#' at position 42: …openssl-1.1.0e]#̲ echo "PATH=PATH:/usr/local/openssl/bin" >> /etc/profile && source /etc/profile
在这里插入图片描述
好嘞,查看版本 ,OK
我们再次进入nginx下
[root@iZgt88z6l1kvd7Z nginx-1.10.1]# ./configure --prefix=/usr/local/nginx --with-pcre=…/pcre-8.39 --with-zlib=…/zlib-1.2.8 --with-openssl=…/opensll-1.1.0e

!注意这里还是要把objs/Makefile下的werror去掉
然后启动一下nginx
[root@iZgt88z6l1kvd7Z nginx-1.10.1]# /usr/local/nginx/sbin/nginx

设置一下环境变量
[root@iZgt88z6l1kvd7Z sbin]# echo “PATH=$PATH:/usr/local/nginx/sbin” >> /etc/profile && source /etc/profile

查看一下进程和端口是否开启
在这里插入图片描述
看看chrome能不能打开nginx的网页
在这里插入图片描述
将nginx加到开机自启

[root@iZgt88z6l1kvd7Z ~]# echo “/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf &” >>/etc/rc.local
(/etc/rc.local 这个文件是系统启动后会自动执行的,我们就将启动命令加入到这个文件中)

如果你发现你的进程没有成功的启动可能是因为你的这个脚本文件没有可以执行的权限 请给该文件增加 其他人可以执行的权限 chmod o+x /etc/rc.local后重启再次查看

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于nginx配置与常见错误解决方法,我可以给您一些简单的介绍和建议。 首先,nginx作为一个开源的高性能Web服务器和反向代理服务器,其配置文件的语法非常简单,易于学习和使用。一般来说,nginx的配置文件主要包含以下几个部分: 1. 全局块:主要是一些全局参数的设置,比如worker_processes、pid、error_log等。 2. events块:主要是一些与事件相关的参数设置,比如worker_connections等。 3. http块:主要是配置http协议相关的参数,比如http服务器、虚拟主机、upstream负载均衡等。 4. server块:主要是配置http服务器相关的参数,比如监听端口、域名、SSL证书等。 当然,nginx的配置还可以包括一些额外的模块配置,比如gzip、fastcgi等等。 关于常见错误解决方法,以下是一些可能会遇到的问题和解决方法: 1. nginx启动失败:这个问题可能是由于配置文件语法错误、端口占用等原因导致的。解决方法可以通过查看日志、检查配置文件、查看端口占用情况等。 2. 403 Forbidden错误:这个错误通常是由于权限不足导致的。解决方法可以通过修改文件或目录的权限、检查SELinux等。 3. 404 Not Found错误:这个错误通常是由于资源不存在导致的。解决方法可以通过检查文件路径、检查文件权限、检查文件是否存在等。 4. 502 Bad Gateway错误:这个错误通常是由于后端服务器连接失败导致的。解决方法可以通过检查后端服务器是否正常运行、检查网络连接等。 总之,nginx作为一个高性能的Web服务器和反向代理服务器,其配置和错误处理都需要一定的经验和技巧,建议您多练习和学习,掌握一些常用的技巧和方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值