自分用めも

初心者ちっくなプログラムネタを中心に、自分用の覚え書きをメモっていくための場所です。

NginxのインストールからHello worldまで

Go言語を使ってWeb socketで遊びたいと思い、サーバ周りを色々調べてたらリバースプロキシなる言葉に行き当たり、サーバはApacheではなくNginx*1がいいんではないか?と思えてきた。
で、vmware上でHello worldまでやってみました。

環境

cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

minimum installで、Apacheは入っていない状態。

Nginxのインストー

yumから行う。
CentOSの初期リポジトリにはNginxが無い(古い?)ので、公式のリポジトリを設定します。

vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
yum -y install nginx

ポート設定

ハマったので一連の手順として忘れないように入れておく。
CentOS7でのネットワーク設定 - 自分用めも

firewall-cmd --permanent --add-service=http

これ大事。

権限絡みのセキュリティ設定(を無効化)

デフォルトで入っている非常に強力な、linuxのユーザーレベルでのアクセス制御機能との事。これのせいでNginxが立ち上がらず…。
設定が複雑すぎて無効化するのが普通になっているらしい。右に習っておきます。

vim /etc/selinux/config
SELINUX=disabled
sudo reboot

再起動で反映。

Nginxのconf設定

vim /etc/nginx/nginx.conf
user  nginx;
worker_processes  2;

error_log  /srv/www/logs/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /srv/www/logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    gzip  on;

    include /srv/www/nginx.conf; # バーチャルホストの設定は外出し
}

バーチャルホストのドキュメントルートは、このサンプルでは
/srv/www/192.168.0.10/html
としています。

/srv以下は多分何もないと思うので、wwwからmkdirが必要です。

vim /srv/www/nginx.conf
server {
	listen      80 default_server;
	server_name 192.168.0.10; # vmwareに割り当てたIP
	access_log  /srv/www/192.168.0.10/logs/access.log main; # 任意のpath
	error_log   /srv/www/192.168.0.10/logs/error.log warn;
	etag        off;

	location / {
		root  /srv/www/192.168.0.10/html;
		index index.html;
	}
}
systemctl restart nginx

問題があったら、

systemctl status nginx

で確認。

テスト用HTMLの配置

vim /srv/www/192.168.0.10/html/index.html
<html><body>
Hello world.
</body></html>

これでブラウザから「http://192.168.0.10」にアクセスすると、Hello world.が表示されます。

参考サイト

nginx入門
nginxでホームディレクトリを公開ディレクトリに設定するふ - Qiita



Nginxは静的なファイル配信を行えるが、スクリプトを処理する機能はありません。
PerlPythonやGoなど、全てスクリプト側でサーバ(daemon)を立てて、Nginxからアタッチします。
とりあえず既存資産の移植ということで、次はPerlPSGI/Plack(サーバはStarlet)を使った設定方法をメモる予定。

*1:えんじんえっくす。ロシアで開発されたWebサーバ