nginx にモジュールを追加してアップデート (apt-get から ソースコードのインストールに変更)
モジュールを追加する為、ビルドし直し
apt-get でインストールしたnginx と、DLしてinstall したnginxでは場所が違うので、色々調整
- apt-get:/etc/nginx/
- make install:/usr/local/nginx/
目次
DL〜インストール
現在のバージョン・モジュール確認
1 2 3 4 |
$ nginx -V nginx version: nginx/1.6.2 TLS SNI support enabled configure arguments: --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt=-Wl,-z,relro --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_spdy_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module --add-module=/build/nginx-9ZP8XW/nginx-1.6.2/debian/modules/nginx-auth-pam --add-module=/build/nginx-9ZP8XW/nginx-1.6.2/debian/modules/nginx-dav-ext-module --add-module=/build/nginx-9ZP8XW/nginx-1.6.2/debian/modules/nginx-echo --add-module=/build/nginx-9ZP8XW/nginx-1.6.2/debian/modules/nginx-upstream-fair --add-module=/build/nginx-9ZP8XW/nginx-1.6.2/debian/modules/ngx_http_substitutions_filter_module |
DL
nginx: download から Mainline version を確認
DL、解凍
今回、RTMPモジュールを付けたかったので、こちらも一緒に
1 2 3 4 |
$ wget http://nginx.org/download/nginx-1.11.13.tar.gz $ wget https://github.com/arut/nginx-rtmp-module/archive/master.zip $ tar xvzf nginx-1.11.13.tar.gz $ unzip master.zip |
ビルド、インストール
必要なモジュールを付けてビルド、インストール
1 2 3 4 |
$ cd nginx-1.11.13/ $ ./configure --with-http_ssl_module --with-http_realip_module --add-module=../nginx-rtmp-module-master $ make $ sudo make install |
インストールされたか確認
1 2 3 4 5 6 |
/usr/local/nginx/sbin/nginx -V nginx version: nginx/1.11.13 built by gcc 4.9.2 (Raspbian 4.9.2-10) built with OpenSSL 1.0.1t 3 May 2016 TLS SNI support enabled configure arguments: --with-http_ssl_module --with-http_realip_module --add-module=../nginx-rtmp-module-master |
現在の nginx.conf で大丈夫か確認
1 2 3 4 |
$ sudo /usr/local/nginx/sbin/nginx -t -c /etc/nginx/nginx.conf nginx: [warn] low address bits of 192.168.0.XX/24 are meaningless in /etc/nginx/sites-enabled/default:4 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful |
warn が出てる・・(後でconfファイル編集時に /24 を削除)
※ 最初、–with-http_realip_module モジュールを付け忘れ下記エラーメッセージが出てしまったので、モジュールを付けビルドし直しました。
1 2 3 4 |
$ sudo ./objs/nginx -t -c /etc/nginx/nginx.conf nginx: [warn] low address bits of 192.168.0.11/24 are meaningless in /etc/nginx/sites-enabled/default:47 nginx: [emerg] unknown directive "set_real_ip_from" in /etc/nginx/sites-enabled/default:75 nginx: configuration file /etc/nginx/nginx.conf test failed |
realipを設定した時の記事:Nginx リバースプロキシで正しいIPアドレスを取得 | Home Made Garbage
nginx.conf
デフォルトのnginx.conf をバックアップして、編集
1 2 |
$ sudo cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx-org.conf $ sudo vi /usr/local/nginx/conf/nginx.conf |
元の /etc/nginx/nginx.conf を参考に変更して行きました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
$ sudo vi /usr/local/nginx/conf/nginx.conf user www-data; worker_processes 1; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; ## # Proxy Cache Settings ## proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=hmg:8m inactive=7d max_size=1000m; upstream backend { server 127.0.0.1:8091; } include /usr/local/nginx/conf.d/*.conf; } |
必須なのは user www-data; と、pid /var/run/nginx.pid; だと思います。あとはプロキシキャッシュの設定を移行しました。
最初は nginx.conf に server {} 設定を全て書いたのですが、長くなってしまったので、 include /usr/local/nginx/conf.d/*.conf; として読み込むようにしました。
nginx.conf の server 設定
conf.d ディレクトリを作成
1 |
$ sudo mkdir /usr/local/nginx/conf.d |
そこに 元々使用していた /etc/nginx/sites-available 配下の設定を移動していきました。
ファイル名はとりあえずポート別に分けました。
※ まずは今動いているポートと違うポートで動作確認しました。
listen 80…フロント
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
$ sudo vi /usr/local/nginx/conf.d/80.conf server { listen 8090; server_name homemadegarbage.0t0.jp; # Real IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # LOG access_log /var/log/nginx/front_access.log combined; error_log /var/log/nginx/front_error.log warn; # Deny location ~ /\. { deny all; } location ~* /wp-config.php { deny all; } (中略)アクセス制限の設定など # phpMyAdmin location /phpmyadmin/ { allow 192.168.0.XX; deny all; proxy_set_header Host $host; proxy_pass http://backend; } # Proxy Cache location / { # WordPress #set $do_not_cache 0; if ($http_cookie ~ ^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$) { set $do_not_cache 1; } proxy_no_cache $do_not_cache; proxy_cache_bypass $do_not_cache; proxy_pass http://backend; proxy_cache hmg; proxy_cache_key $scheme$proxy_host$uri$is_args$args; proxy_cache_valid 200 1d; } } |
listen 8080…バックエンド
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
$ cat /usr/local/nginx/conf.d/8080.conf server { listen 8091; server_name localhost; root 公開ディレクトリ; index index.html index.php; #charset koi8-r; set_real_ip_from 127.0.0.1; real_ip_header X-Forwarded-For; access_log /var/log/nginx/fastcgi_access.log combined; error_log /var/log/nginx/fastcgi_error.log warn; location / { try_files $uri $uri/ /index.php?q=$uri&$args; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # phpMyAdmin location /phpmyadmin { alias /usr/share/phpmyadmin; } location ~ /phpmyadmin/.*\.php$ { # fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/$uri; include fastcgi_params; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { # fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } |
※ fastcgi あたりの設定が上手く行ってないと、表示されなかったり下記のエラーが出たりしていました。
1 2 3 4 5 6 7 8 |
An error occurred. Sorry, the page you are looking for is currently unavailable. Please try again later. If you are the system administrator of this resource then you should check the error log for details. Faithfully yours, nginx. |
PHP7について
これを機にPHP7にしてみようと思いましたが、いくつかプラグインが動かないようでだめでした。WordPressのプラグイン一覧から「停止」「有効」も出来ない状態になってしまったので、やむなく戻しました。
構文チェック
1 2 3 |
$ sudo /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful |
起動
試行錯誤しつつ起動出来るようになりました。
1 |
$ /usr/local/nginx/sbin/nginx |
ブラウザで 192.168.0.XX:8090/ にアクセスすると無事表示されるようでした。
プロセスの確認、終了など
8090 ポートが動いているプロセスを確認して、
1 2 3 4 |
$ sudo lsof -i:8090 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 9036 root 6u IPv4 23167884 0t0 TCP *:8090 (LISTEN) nginx 9037 www-data 6u IPv4 23167884 0t0 TCP *:8090 (LISTEN) |
kill します。
1 |
sudo kill 9036 |
ポートの設定を変更
wordpress 記事編集など諸々動作確認を終えたら、ポートを変更して切り替えます。
nginx.conf
1 |
$ sudo vi /usr/local/nginx/conf/nginx.conf |
1 2 3 |
upstream backend { server 127.0.0.1:8091; } |
80.conf
1 2 3 4 |
sudo vi /usr/local/nginx/conf.d/80.conf server { listen 80; (以下略) |
8080.conf
1 2 3 4 |
$ cat /usr/local/nginx/conf.d/8080.conf server { listen 8080; (以下略) |
nginx バージョン切替
nginx 1.6.2 から、nginx 1.11.13 へ切り替えます。
現在の nginx(1.6.2)を停止
1 |
$ sudo service nginx stop |
nginx 1.11.13 を起動
1 |
$ /usr/local/nginx/sbin/nginx |
プロセスの終了
上手く行かなかった場合は終了してやり直したりします。
1 2 3 4 5 6 7 8 |
$ ps aux |grep nginx root 9954 0.0 0.2 21660 1828 ? Ss 14:11 0:00 nginx: master process ../sbin/nginx www-data 9955 0.0 0.3 21936 3144 ? S 14:11 0:00 nginx: worker process www-data 9956 0.0 0.3 21820 2736 ? S 14:11 0:00 nginx: cache manager process root 10715 0.0 0.2 21660 1840 ? Ss 15:32 0:00 nginx: master process /usr/local/nginx/sbin/nginx www-data 10716 0.4 0.3 21984 3308 ? S 15:32 0:07 nginx: worker process www-data 10717 0.0 0.2 21820 2580 ? S 15:32 0:00 nginx: cache manager process pi 11160 0.0 0.2 3776 1976 pts/1 S+ 15:59 0:00 grep --color=auto nginx |
master process /usr/local/nginx/sbin/nginx のプロセスを終了
1 |
sudo kill 10715 |
無事表示されたら、自動起動の設定などを変更していきます。
パスを通す
パス自体は元々通っているので反映させたい…
1 2 3 4 |
$ nginx -v nginx version: nginx/1.6.2 $ sudo /usr/local/nginx/sbin/nginx -v nginx version: nginx/1.11.13 |
パスの場所とかを確認してみる
1 2 3 4 |
$ which nginx /usr/sbin/nginx $ echo $PATH /usr/local/nvm/versions/node/v6.2.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games |
/usr/sbin/ の nginx を、バックアップしてからコピーしてみる
1 2 3 4 |
$ sudo cp /usr/sbin/nginx /usr/sbin/nginx-bk $ sudo cp /usr/local/nginx/sbin/nginx /usr/sbin/nginx $ nginx -v nginx version: nginx/1.11.13 |
無事バージョンが変更されましたがこのやり方は良かったんですかね…。/usr/sbin/nginx を削除して、/usr/local/nginx/sbin/nginx にパスを通し治した方が良いのでしょうか。
サービス登録
こちらを参考にさせていただきました
nginxの自動起動の設定と起動ユーザの設定 – No:1337 – Linuxで自宅サーバ構築(新森からの雑記)
現在の設定をバックアップして新規作成しました。
1 2 |
$ sudo mv /etc/init.d/nginx /etc/init.d/nginx-bk $ sudo vi /etc/init.d/nginx |
参考にさせて頂いたブログ記事のファイルをそのまま使用させて頂きました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
#!/bin/sh ### BEGIN INIT INFO # Provides: nginx # Required-Start: $local_fs $remote_fs $network $syslog $named # Required-Stop: $local_fs $remote_fs $network $syslog $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts the nginx web server # Description: starts nginx using start-stop-daemon ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/local/nginx/sbin/nginx NAME=nginx DESC=nginx test -x $DAEMON || exit 0 set -e . /lib/lsb/init-functions test_nginx_config() { if $DAEMON -t $DAEMON_OPTS >/dev/null 2>&1; then return 0 else $DAEMON -t $DAEMON_OPTS return $? fi } start() { test_nginx_config # Check if the ULIMIT is set in /etc/default/nginx if [ -n "$ULIMIT" ]; then # Set the ulimits ulimit $ULIMIT fi start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ --retry 5 --exec $DAEMON -- $DAEMON_OPTS || true } stop() { start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ --retry 5 --exec $DAEMON || true } case "$1" in start) echo -n "Starting $DESC: " start echo "$NAME." ;; stop) echo -n "Stopping $DESC: " stop echo "$NAME." ;; restart|force-reload) echo -n "Restarting $DESC: " stop sleep 1 echo "$NAME." start ;; reload) echo -n "Reloading $DESC configuration: " test_nginx_config start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON || true echo "$NAME." ;; configtest|testconfig) echo -n "Testing $DESC configuration: " if test_nginx_config; then echo "$NAME." else exit $? fi ;; status) status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $? ;; *) echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest}" >&2 exit 1 ;; esac exit 0 |
これで、無事 service コマンドが使えるようになりました。
1 |
sudo service nginx restart |
※ 最初、/usr/local/nginx/conf/nginx.conf の pid の設定を忘れていたため、service コマンドをすると、nginxが動作はするけどコマンドが終了しない状態になり、直接起動すると下記のエラーメッセージが出ていました(´・ω・`)
1 2 3 4 5 |
$ /usr/local/nginx/sbin/nginx nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (13: Permission denied) 2017/04/25 16:07:10 [warn] 11347#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /usr/local/nginx/conf/nginx.conf:1 2017/04/25 16:07:10 [warn] 11347#0: low address bits of 192.168.0.11/24 are meaningless in /usr/local/nginx/conf/nginx.conf:86 2017/04/25 16:07:10 [emerg] 11347#0: open() "/var/log/nginx/front_access.log" failed (13: Permission denied) |
ラズパイの再起動後も大丈夫そうです。
参考にさせて頂きました
- リクエストを落とさずにnginxをアップグレードする方法とその検証 | cloudrop
- Raspberry Pi + nginx で低負荷RTMPサーバを構築する | VariedTasteFinder