Nginxをインストールしようとしています。何をしても、nginxがopensslパスを見つけられないようです。それは、opensslディレクトリのいずれにも存在しないファイルを検索しているようです。以下は私のmake出力です。 nginxがopensslを探すためにさまざまなパスを指定しようとしました。
[root@server nginx-0.8.54]# make
make -f objs/Makefile
make[1]: Entering directory `/root/nginx-0.8.54'
cd /usr/local/ssl \
&& make clean \
&& ./config --prefix=/usr/local/ssl/.openssl no-shared no-threads \
&& make \
&& make install LIBDIR=lib
make[2]: Entering directory `/usr/local/ssl'
make[2]: *** No rule to make target `clean'. Stop.
make[2]: Leaving directory `/usr/local/ssl'
make[1]: *** [/usr/local/ssl/.openssl/include/openssl/ssl.h] Error 2
make[1]: Leaving directory `/root/nginx-0.8.54'
make: *** [build] Error 2
誰かこれについて何か考えはありますか?
これは、nginx configure
が相対パスを使用している場合にも発生する可能性があります。代わりに/
からの完全パスを使用すると、ライブラリがより確実に検出されます。
機能しません:./configure --with-openssl=../openssl-source
作品:./configure --with-openssl=/home/build/src/openssl-source
./configure —with-cc-opt="-I/usr/local/opt/openssl/include" --with-ld-opt="-L/usr/local/opt/openssl/lib"
nginx
を使用してmacOS
をビルドしようとしていて、openssl
がbrew
を介してインストールされている場合、openssl
ライブラリは次のようなパスにインストールされます。 /usr/local/opt/openssl
。 brew info openssl
から
この式はkegのみです。つまり、/ usr/localにシンボリックリンクされていません。
なぜなら、Appleは、独自のTLSおよび暗号ライブラリを支持してOpenSSLの使用を廃止したためです。
このような場合、@ Bingnanが言ったように、--with-cc-opt
および--with-ld-opt
を介してopenssl
のインクルードパスとlibパスをconfigureスクリプトに通知できます。
./configure --with-cc-opt="-I/usr/local/opt/openssl/include" --with-ld-opt="-L/usr/local/opt/openssl/lib"
ここでの問題を正確に思い出すことはできませんが、opensslが実際に存在する場所への/ usr/local/ssl(またはopenssl?)へのシンボリックリンクが問題を解決すると想定しています。デフォルトのOpenSSLでUbuntu 10.04にSSLサポート付きのnginxをインストールするのに問題はありませんでした。だから私はこれを試してみてこれに苦労している人をお勧めします。
また、おそらく正しいdevパッケージをインストールする必要があります。これは、nginxをインストールする前に通常インストールするものです。
2 apt-get update
3 apt-get install gcc
4 apt-get install g++
5 wget http://www.python.org/ftp/python/2.7/Python-2.7.tgz
6 wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.12.tar.gz
7 wget http://zlib.net/zlib-1.2.5.tar.gz
8 ls
9 gzip -d pcre-8.12.tar.gz
10 gzip -d zlib-1.2.5.tar.gz
11 gzip -d Python-2.7.tgz
12 tar -xvf zlib-1.2.5.tar
13 cd zlib-1.2.5
14 ./configure
15 make
16 ls
17 Makefile
18 ls
19 ./configure
20 make
21 Sudo apt-get install build-essential
22 make
23 make install
24 cd ..
25 ls
26 tar -xvf pcre-8.12.tar
27 cd pcre-8.12
28 ./configure --prefix=/usr --enable-unicode-properties
29 make
30 make install
31 cd ..
32 ls
33 tar -xvf Python-2.7.tar
34 apt-get install openssl
35 cd Python-2.7
36 apt-get install libssl-dev
37 apt-get install libperl-dev
38 ./configure --help
39 ./configure --enable-ipv6
40 make
41 make install
「yum install openssl-devel」を実行すると、ubuntuに切り替えるよりもはるかに簡単に見えます。
OPと同じ問題がありました。私はopensslをインストールしていましたが、nginxはコンパイル時にそれを見つけることができましたが、libssl-develへのポインターが私を助けました
私の場合、問題は--prefix
と--openssldir
をnginx --with-openssl-opt
オプションに渡そうとしたことです:
RUN ./configure --prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/run/nginx.pid \
--with-openssl=/usr/local/src/openssl-1.1.1c \
--with-openssl-opt="--prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers" \
--with-http_ssl_module \
--with-stream \
--with-mail=dynamic
Nginxは、ビルドされたopensslがopenssl sourcesフォルダの.openssl
サブフォルダにあることを期待しています。私の場合は/usr/local/src/openssl-1.1.1c/.openssl
です。しかし、私はそれにprefix
とopenssldir
を渡したので、ビルドされたopensslは/usr/local/ssl
のシステムロケーションに存在しました。
そのため、nginxは、前処理時にopensslヘッダー(objs/Makefile
が/usr/local/src/openssl-1.1.1c/.openssl/include
でそれらを探していた)も、リンケージ後にlibssl.a
/libcrypto.a
も検出できませんでした(objs/Makefile
は、/usr/local/src/openssl-1.1.1c/.openssl/lib
でそれらを予期していました)。
prefix
とopenssldir
オプションを削除し、ビルドが機能しました:
RUN ./configure --prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/run/nginx.pid \
--with-openssl=/usr/local/src/openssl-1.1.1c \
--with-openssl-opt="shared zlib enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers" \
--with-http_ssl_module \
--with-stream \
--with-mail=dynamic
--with-openssl = pathは、OpenSSLライブラリsourcesへのパスを設定します。
パスはopensslソースであり、make install
dirではありません
mac:nginx-1.17.3 qidizi$ ls ../openssl-OpenSSL_1_1_1c/.
./ ../ .cfg.sh .openssl/
pcreまたはzlibは同じです。
Zlibの場合
zlib tarファイルを解凍し、構成します。
道 - /opt/app/workload/nginx-test/nginx-1.8.0/zlib/zlib-1.2.8
./configure --prefix=/opt/app/workload/nginx-test/nginx-1.8.0/zlib/zlib-1.2.8
make
make install
PCREの場合
PCREファイルを解凍して構成します
道 - /opt/app/workload/nginx-test/nginx-1.8.0/pcre/pcre-8.36
./configure --prefix=/opt/app/workload/nginx-test/nginx-1.8.0/pcre/pcre-8.36
make
make install
構成する必要のないファイルを解凍するだけで、Nginxはそれを自分で使用します
opensslの場合
道 - /opt/app/workload/nginx-test/nginx-1.8.0/openssl-1.0.1l
Nginxの場合
./configure --prefix=/opt/app/workload/nginx-test/nginx-1.8.0/nginx --with-pcre=/opt/app/workload/nginx-test/nginx-1.8.0/pcre/pcre-8.36 --with-zlib=/opt/app/workload/nginx-test/nginx-1.8.0/zlib/zlib-1.2.8 --with-http_ssl_module --with-openssl=/opt/app/workload/nginx-test/nginx-1.8.0/openssl-1.0.1l
opensslヘッダーは通常、Ubuntuのlibssl-dev
によって提供されます。また、opensslソースへのパスを手動で指定できる、nginxの--with-openssl=DIR
./configure
オプションもあります。パッケージマネージャーを使用するのではなく、ソースからビルドする理由はありますか?