nginx安裝時(shí),make編譯可能會(huì)出現(xiàn)的錯(cuò)誤問(wèn)題
第一個(gè),報(bào)錯(cuò)
src/core/ngx_murmurhash.c: In function ‘ngx_murmur_hash2’:
src/core/ngx_murmurhash.c:37:11: error: this statement may fall through [-Werror=implicit-fallthrough=]
h ^= data[2] << 16;
^~~~~~~~~~~~~~
src/core/ngx_murmurhash.c:38:5: note: here
case 2:
^~~~
src/core/ngx_murmurhash.c:39:11: error: this statement may fall through [-Werror=implicit-fallthrough=]
h ^= data[1] << 8;
^~~~~~~~~~~~~
src/core/ngx_murmurhash.c:40:5: note: here
case 1:
^~~~
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
分析原因:
是將警告當(dāng)成了錯(cuò)誤處理,打開(kāi) nginx的安裝目錄/objs/Makefile,去掉CFLAGS中的-Werror,再重新make
- -Wall 表示打開(kāi)gcc的所有警告
- -Werror,它要求gcc將所有的警告當(dāng)成錯(cuò)誤進(jìn)行處理
第二個(gè),make出現(xiàn)的錯(cuò)誤
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’沒(méi)有名為‘current_salt’的成員:cd.current_salt[0] = ~salt[0];
最好的辦法是換一個(gè)版本,因?yàn)闂l件限制,我們就進(jìn)到源碼里把這行直接注釋掉好了。
# vim src/os/unix/ngx_user.c
進(jìn)入里面注釋掉36行
第三個(gè)錯(cuò)誤,openssl版本錯(cuò)誤
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
原因:
由于默認(rèn)使用了openssl 1.1.x 版本,導(dǎo)致的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 進(jìn)入目錄把openssl編譯安裝到 /usr/local/openssl 下
[root@iZgt88z6l1kvd7Z openssl-1.1.0e]# ./config -t
[root@iZgt88z6l1kvd7Z openssl-1.1.0e]# make depend //一種度makefile的規(guī)則,通過(guò)掃描儀個(gè)目錄下的所有C\C++ 代碼,從而判專斷出文件之間的依賴關(guān)系,如a.cc文件中調(diào)用了b.h(如以形勢(shì)include<b.h>),如果之后a.cc文件被改動(dòng),那 么只需要重新編屬譯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注意每個(gè)人的目錄都是不一樣的,我這里是root下的openssl,至于其他人看自己情況,切換目錄
[root@iZgt88z6l1kvd7Z openssl-1.1.0e]# ldconfig
[root@iZgt88z6l1kvd7Z openssl-1.1.0e]# echo $?
0
[root@iZgt88z6l1kvd7Z openssl-1.1.0e]# echo "PATH=$PATH:/usr/local/openssl/bin" >> /etc/profile && source /etc/profile然后重新進(jìn)入nginx-1.9.9執(zhí)行[root@iZwz967a5gqt3aqi2g3pbkZ nginx-1.9.9]# ./configure --prefix=/usr/local/nginx --add-module=/root/nginx-1.9.9/headers-more-nginx-module-0.33 --with-http_stub_status_module --with-http_ssl_module注意,我這里的是這條命令,至于你們的./configure……就看你們自身情況
重新make
一下哎
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nginx+SpringBoot實(shí)現(xiàn)負(fù)載均衡的示例
這篇文章主要介紹了Nginx優(yōu)雅的實(shí)現(xiàn)負(fù)載均衡,幫助大家更好的理解和使用nginx,感興趣的朋友可以了解下2020-10-10nginx開(kāi)啟ws訪問(wèn)和4層負(fù)載的編譯參數(shù)示例
這篇文章主要為大家介紹了nginx開(kāi)啟ws訪問(wèn)和4層負(fù)載的編譯參數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07nginx配置完rewrite瀏覽器提示將您重定向的次數(shù)過(guò)多的解決方法
本文主要介紹了nginx配置完rewrite瀏覽器提示將您重定向的次數(shù)過(guò)多的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07https如何通過(guò)nginx完成雙向認(rèn)證轉(zhuǎn)發(fā)
文章詳細(xì)介紹了HTTPS單向認(rèn)證和雙向認(rèn)證的概念,并提供了生成自簽證書(shū)、配置Nginx進(jìn)行雙向認(rèn)證的具體步驟,通過(guò)雙向認(rèn)證,服務(wù)端和客戶端可以互相驗(yàn)證身份,提升安全性,在測(cè)試過(guò)程中,使用瀏覽器訪問(wèn)HTTPS接口時(shí),需要安裝客戶端證書(shū)才能成功獲取數(shù)據(jù)2024-11-11Nginx中使用Lua腳本與圖片的縮略圖處理的實(shí)現(xiàn)
本文主要介紹了Nginx中使用Lua腳本與圖片的縮略圖處理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03nginx反向代理60s超時(shí)報(bào)錯(cuò)問(wèn)題解決
本文主要介紹了Nginx反向代理時(shí)遇到60秒超時(shí)報(bào)錯(cuò)的問(wèn)題,經(jīng)過(guò)排查發(fā)現(xiàn)是由于代理服務(wù)執(zhí)行時(shí)間過(guò)長(zhǎng)導(dǎo)致的,具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02Nginx的偽靜態(tài)配置中使用rewrite來(lái)實(shí)現(xiàn)自動(dòng)補(bǔ)全的實(shí)例
這篇文章主要介紹了Nginx的偽靜態(tài)配置中使用rewrite來(lái)實(shí)現(xiàn)自動(dòng)補(bǔ)全的實(shí)例,文中對(duì)rewrite的相關(guān)參數(shù)和正則表達(dá)使用也做了介紹,需要的朋友可以參考下2015-12-12