実践Linux
CentOS7        CentOS7 目次へ  TOP(HOME)へ

Webサーバー         2016年6月




メインのmy-dom.xxxドメインのホームページは/var/www/htmlに設置。http://www.my-dom.xxxでアクセス。
さらに新しい別のドメインnew-dom.xxxを取得したとする(CentOS5/6.5を参照)。http://www.new-dom.xxxでアクセスする。
new-domユーザーを作成しておく。(グループapache、/sbin/nologin、ホーム作成。)
Web公開する /home/new-dom はアクセス権を755にしておく。

設定ファイル /etc/httpd/conf/httpd.conf

ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin root@localhost

#ServerName www.example.com:80
 ← 元(コメントアウトされている)
ServerName www.my-dom.xxx:80
 ← サーバー名を指定

<Directory />
  AllowOverride none
 ← オーバーライド無効(アクセス制御ファイル.htacssessを無視する)
  Require all denied
</Directory>

DocumentRoot "/var/www/html"

<Directory "/var/www">
  AllowOverride None
  Require all granted
</Directory>

<Directory "/var/www/html">
  #Options Indexes FollowSymLinks
 ← 元をコメントアウトする
  Options FollowSymLinks
 ← Indexesを削除してファイルの一覧表示を防ぐ。FollowSymLinksはシンボリックリンクを辿ることを許可する。
  #Options Includes ExecCGI FollowSymLinks
 ← さらにSSI、CGIを許可する場合
  AllowOverride None
  #AllowOverride All
 ← .htaccessを許可する場合
  Require all granted
</Directory>

<IfModule dir_module>
  DirectoryIndex index.html
 ← URLの最後が「/」でアクセスされた時の優先表示ファイル名
</IfModule>
            (複数ある場合は、左から優先され表示される)

<Files ".ht*">
 ← .htaccess、.htpasswd、htdigest等
  Require all denied
</Files>

ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
  LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
  LogFormat "%h %l %u %t \"%r\" %>s %b" common
  <IfModule logio_module>
    #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
 ← 元をコメントアウトする
    LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
  ← 長すぎるURI(414エラー)はログに記録しない
  </IfModule>
以下は追加
  SetEnvIf Request_URI "default\.ida" no_log
 ← wormからのアクセスをログに記録しない
  SetEnvIf Request_URI "cmd\.exe" no_log
 ← 〃
  SetEnvIf Request_URI "root\.exe" no_log
 ← 〃
  SetEnvIf Request_URI "Admin\.dll" no_log
 ← 〃
  SetEnvIf Request_URI "NULL\.IDA" no_log
 ← 〃
  SetEnvIf Remote_Addr 192.168.1 no_log
 ← 内部からのアクセスをログに記録しない
  SetEnvIf Remote_Addr 127.0.0.1 no_log
 ← 自ホストからのアクセスをログに記録しない
  CustomLog logs/access_log combined env=!no_log
 ← 上記以外のアクセスをログに記録する
  #CustomLog "logs/access_log" common
 ← 元
  #CustomLog "logs/access_log" combined
 ← 元をコメントアウトする
</IfModule>

<IfModule alias_module>
  ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>

<Directory "/var/www/cgi-bin">
  AllowOverride None
  Options None
  Require all granted
</Directory>

<IfModule mime_module>
 ← ファイルのタイプを決める
  TypesConfig /etc/mime.types
  AddType application/x-compress .Z
  AddType application/x-gzip .gz .tgz
  #AddHandler cgi-script .cgi
  #AddHandler cgi-script .cgi .pl
 ← cgiの拡張子を有効化、CGIスクリプトに.plを追加する場合
  AddType text/html .shtml
  AddOutputFilter INCLUDES .shtml
</IfModule>

#AddDefaultCharset UTF-8
 ← 元をコメントアウトする
AddDefaultCharset Off
 ← 文字化け対応

<IfModule mime_magic_module>
  MIMEMagicFile conf/magic
</IfModule>

EnableSendfile on

IncludeOptional conf.d/*.conf

/etc/httpd/conf/httpd.confに追記

バーチャルホストnew-dom.xxxを設定 。

###############################追加########################################
AddType application/x-httpd-php .php .html
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(xbm)|(js)|(css)$" nolog
NameVirtualHost 333.333.333.210

<VirtualHost 333.333.333.210>
  my-dom.xxxのWeb設定。http://www.my-dom.xxxでアクセス。
  ServerAdmin root@localhost
  DocumentRoot /var/www/html
  ServerName www.my-dom.xxx
  ErrorLog logs/www_error_log
  CustomLog logs/www_access_log combined env=!nolog
</VirtualHost>

<VirtualHost 333.333.333.210>
  新しいドメインnew-dom.xxxの設定。http://www.new-dom.xxxでアクセス。
ScriptAlias /cgi-bin/ /home/new-dom/cgi-bin/
ServerAdmin root@localhost
DocumentRoot /home/new-dom/public_html
ServerName www.new-dom.xxx
ErrorLog logs/new-dom_error_log
CustomLog logs/new-dom_access_log combined env=!nolog
</VirtualHost>


説明
AddType application/x-httpd-php .php .html
  .phpや .htmlをphpプログラムが動作できるファイルとして認識させる。
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(xbm)|(js)|(css)$" nolog
  アクセスログをとりたくない対象ファイルを環境変数「nolog」に設定。
CustomLog logs/www_access_log combined env=!nolog
  combinedは書き出すログの書式。デフォルトでcombined、commonなど4種類用意されている。
  env=!nologは、環境変数「nolog」に設定されたものはログをとらない。


/etc/httpd/conf.d/userdir.confの編集(必要に応じて=サブドメイン用)
<IfModule mod_userdir.c>
  UserDir disabled
  #UserDir public_html
 ← http://servername/~userのリクエストで開く実際のディレクトリを指定
</IfModule>



firewalldの設定
trustedゾーンに対しては、必要ない。
externalゾーンの設定
# irewall-cmd --get-services  定義されているサービス一覧
# firewall-cmd --list-service --zone=external
# firewall-cmd --add-service=http --zone=external
# firewall-cmd --add-service=http --zone=external --permanent
# firewall-cmd --add-service=https --zone=external
# firewall-cmd --add-service=https --zone=external --permanent

httpdサービスを起動
# systemctl --type=service list-unit-files  インストールされたサービス一覧
# systemctl --type=service list-units | grep httpd  実行中のサービスにhttpdがあるか
# systemctl start httpd
# systemctl enable httpd

ユーザーの作成
/var/www/htmlを使用するftpアクセス用のユーザーを作成する。
ユーザーホームには/var/wwwを指定、グループはapache、ログインシャエルは/sbin/nologin等。
/var/www以下の所有をこのユーザー、グループapacheに変えておく。
 # chown -R ユーザー:apache /var/www

SElinux
/var/www/htmlはそのままで見ることができるが、ユーザーホームで作成したpublic_html以下はそのままでは見ることはできない。
booleanのポリシーを、 # getsebool -a | grep httpで調べておく。
ポリシーhttpd_enable_homedirsをONにして、ホ−ムにアクセスできるようにする。
# setsebool -P httpd_enable_homedirs 1



php関係の設定
(Apache+phpでMariaDB(MySQL)データベースにアクセスできるようにする)
インストール状況の確認
# yum list installed | grep php
インストール
# yum list | grep php
# yum install php      php、php-common、php-cliがインストールされる。
# yum install php-mysql   php-mysql、php-pdoがインストールされる。

httpdの再起動が必要。

/etc/httpd/conf.d/php.confの確認
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch> 
AddType text/html .php   httpd.confのAddType text/html .shtml等と同じ
DirectoryIndex index.php   httpd.confのDirectoryIndex index.htmlに追加
php_value session.save_handler "files"
php_value session.save_path "/var/lib/php/session"


言語は、UTF-8で統一しておく。(mariaDBもUTF-8で設定。)
エディタにUTF-8とUTF-8Nの保存形式がある場合は、UTF-8Nを選ぶ。
<head>
<meta http-equiv="Content-Language" content="ja">
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>テストphp</title>
</head>

文字化け対策
CentOS6.5では必要なかったが、CentOS7では、これをやっておかないと日本語を含むクエリ等がうまく動作しない。これは、/etc/php.iniのmbstring関係をいろいろ編集してもダメだった。
データーベースへのコネクションを確立した後、次のように1行追加。
$con = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。");
mysql_set_charset('utf8');  ←これを追加。


認証設定
/var/www/html/my-pageに認証を設定する例
認証ファイル設置場所を/var/www/conf/とする。このディレクトリを作っておく(rootで作成してもOK)。

ユーザーIDとパスワードの設定
@Basic認証(従来のもの。暗号化されないがどのブラウザでもOK。)
パスワードファイルは/var/www/conf/に.htpasswd名(隠しファイル)で作成するものとする。
# htpasswd -c /var/www/conf/.htpasswd ユーザID
二人目からは、
# htpasswd /var/www/conf/.htpasswd ユーザID  (-cはいらない。-cをつけるとデータは初期化されてしまう。)
ユーザの削除は、
# htpasswd -D /var/www/conf/.htpasswd ユーザID   またはファイルを直接編集して削除。

ADigest認証(暗号化して流されより安全。ただし一部ブラウザでは対応していないものがある。)
パスワードファイルは/var/www/conf/に.htdigest名(隠しファイル)で作成するものとする。
# htdigest -c /var/www/conf/.htdigest "Digest" ユーザID   "Digest"はrealm名(下のhttpd.confと同じものを指定)
二人目からは、
# htdigest /var/www/conf/.htdigest "Digest" ユーザID  (-cはいらない。)

/etc/httpd/conf/httpd.confを編集
<Directory /var/www/html/my-page>
  #Digest認証の場合
  #AuthType Digest
  #AuthName "Digest"
   realmの設定(適当に)
  #AuthUserFile /var/www/conf/.htdigest

  #Basic認証の場合
  AuthType Basic
  AuthName "Restricted Pages"
   認証時のウィンドに表示される名称(適当に)
  AuthUserFile /var/www/conf/.htpasswd

  require valid-user
   登録ユーザすべてに許可
  #require user earth moon
   earthとmoonに許可
</Directory>


Selinux

/var/www/confの場合は、なにもしなくてもパスワードファイルにアクセスできるが、/home/~/confの場合はアクセスできない。
httpd_read_user_contentをonにする必要がある。
# setsebool -P httpd_read_user_content on



TOP(HOME)へ

目 次

特別企画
Raspberry Piで遊ぶ

HOME(全体のシステム構成&目次)

CentOS7
CentOS7のインストール〜ネットワークの設定ほか
CentOS7の新機能(systemdとfirewalld)
ダイレクトルールを使ったfirewallの強化
DNS(BIND)サーバー
Webサーバー
  Webでファイルの受け渡し
  アクセス解析ツールAwstats
  Wordpressでブログ構築
FTPサーバー
FTPS(FTP over SSL/TLS)
Mail(Dovecot&Postfix)サーバー
Sambaサーバー
MariaDB(MySQL)サーバー
DHCPサーバー
SSHサーバー
VNCサーバー
ドメインの追加

CentOS5〜6
ネットワーク&ファイアウォール(iptables)
DNS(BIND)サーバー
DHCPサーバー
メールサーバー(基本)
メールサーバー/実際の運用
Webサーバー
  WebDAVによるファイル共有
  Webでファイルのやり取り
  アクセス解析ツールawstats
  namazuで全文検索
  WordPressブログサイト構築
  EC-CUBEショッピングサイト構築
FTPサーバー
ファイルサーバー・Samba
データベースpostgreSQL
  ExcelからpostgreSQLを操作
データベースMySQL
SSHサーバー
VNC
SSL/TLSを利用した暗号化通信
openVPN
ストリーミングサーバー
    C++ RTMP Server
    Helix server Basic
ドメインの追加
Xen・仮想化
特定ディレクトリに容量制限

SELinux
SELinux基本設定
新しいタイプとポリシー・モジュールを作成してみる
マクロを利用したteファイルの記述
新しいドメインを導入してみる

coLinux
Fedora11で試す

Cプログラミング目次
X11プログラム
サイエンス・プログラム

計測・プログラム
秋月電子のデーターロガーpico ADC-16
「今すぐ使えるパソコン計測USBマイコン基板」に付属のTRZ1102
センサーの使用例

Glade2/GTK+を使ってみる
テキスト・ビューで簡易エディター
ドローイングエリアで自動描画
放物線運動(pango、cairoも試してみる)
これらを、GTK+のみで書き出す

フォントについて
ネットワーク・プログラミング
postgreSQL接続
CGI
ファイル操作

●その他
印刷機関連開発 刷版絵柄面積率測定
数独をExcelで解く