スマホでの見栄えを確認するときに、いちいちサーバーにアップロードしているのは面倒。 HTMLファイルを編集しているマシンでHTTPサーバーを立ち上げて、編集したファイルをそのままサーバーのソースに使えば確認が楽だなー、と。
手軽です。 CGI類がなければ十分使えます。
-b
・-r
・-d
オプションが増えている。
-p
オプションでポートを指定できる。
-b
オプションで待ち受けるアドレスを指定できる。
-r
オプションででドキュメントルートを指定できる。
-d
オプションを指定するとフォアグラウンドで動く。
この場合はドキュメントルートを相対指定できる。
-d
オプションなしだとデーモンになる。
この場合はchdir("/");
するので、ドキュメントルートは絶対指定する必要がある。
こんな感じ。
$ dhttpd -d -r /path/to/document/root -p 8888
この例だとポート8888で待ち受けるようになるので、Windowsのファイアウォールを開けてやれば、IPアドレスを直接打つことでスマホからアクセスできます。
ディレクトリが指定されたときにindex.htm
を仮定している場合は、index.htm
まで打ち込んであげましょう。
若干設定ファイルを書く必要がありますが、Cygwinのsetupから入れられて、なおかつ意外とお手軽です。
Cygwinのsetupから入れた場合、設定ファイルは/etc/nginx/nginx.conf
になります。
最低限、これだけ書けばフォアグランドで動きます。
これでセキュリティが保たれてるとかそういう意味ではないので注意。
あくまでファイアウォールの中で試す場合の話。
daemon off; events { } http { server { location "/" { root /path/to/document/root; } } }
起動は/usr/sbin/nginx
。
とりあえず
$ /usr/sbin/nginx nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (2: No such file or directory) 2018/01/01 23:22:48 [emerg] 73188#0: mkdir() "/var/lib/nginx/tmp/client_body" failed (2: No such file or directory)
と怒られるので、/var/log/nginx
と/var/lib/nginx/tmp
を掘っておきます。
$ mkdir -p /var/log/nginx $ mkdir -p /var/lib/nginx/tmp
これでOK。
この設定だとフォアグランドで動くので、止めるときはCtrl+Cでポチっと。
events
は中身が空でもいいから書いておかないと起動しません。
ポートはデフォルトでは80か8000のようです。
80は特権ポートなので、オープンできなければ8000になるのかな。
普通はlisten
で指定することになるでしょう。
ポートやログを指定する場合は以下のような感じになります。
ログの止め方がエラーログとアクセスログで違うので注意。
というか、エラーログは止められないらしい(ので、/dev/null
に吐くようにする)。
daemon off; error_log /path/to/error_log; # error_log /dev/null; # stop logging # error_log /dev/tty info; # output to tty with infomatives events { } http { access_log /path/to/access_log; # access_log off; # stop logging; # access_log /dev/tty; # output to tty server { listen 8888; location "/" { root /path/to/document/root; } } }
それぞれのデフォルトは/usr/sbin/nginx -V
で分かります。
ロックファイルやPIDファイルの位置も確認しておいた方がいいかもしれない。
Cygwinのデフォルトはこんな感じ。
--conf-path=/etc/nginx/nginx.conf --lock-path=/var/run/nginx.lock --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log
HTMLファイル名をhtm
にしている場合、MIMEタイプの指定と、インデックスファイルの指定が必要でしょう。
daemon off; events { } http { include mime.types; index index.html index.htm; server { listen 8888; location "/" { root /path/to/document/root; } } }
この調子でPHPもFCGIで動いてしまいます。
CygwinでPHPを入れるとphp-fpm
も一緒に入るので
/etc/php-fpm.d/www
の設定を確認します。
デフォルトではlocalhostのポート9000で待ち受けるようになっています。
/var
あたりで
mkfifo php-www.sock
とかしてFIFO作って、
listen
にフルパスを指定してやるとUNIXドメインソケットで待ち受けるようになります。
あとは
/usr/sbin/php-fpm
とすればPHPのFPMが動き出します。
ログを
/dev/tty
に出すように設定して、
-F
オプションをつけて起動すると、フォアグランドで動いてログをTTYに垂れ流すようになるので、うまく動かなかったときに役に立つでしょう。
あとはnginx側で普通にCGIを設定すれば動きます(04 Mar 2019)
ローカルで動かすにはちょっと大げさですが、サーバーで凝ったことをやっている人はその確認に使えるかもしれません。
フォワードプロキシをリレーできるのはApacheだけっぽい。
導入はCygwinのsetupでできます。
ただ、apacheでは検索に引っかかりません。
httpdで探してください。
webカテゴリの中に入っています。
バイナリは/usr/sbin
の中に入ります。
とりあえずどういう設定でビルドされているのか見てみます。
$ /usr/sbin/httpd -V Server version: Apache/2.4.29 (Unix) Server built: Dec 7 2017 00:38:16 Server's Module Magic Number: 20120211:68 Server loaded: APR 1.6.3, APR-UTIL 1.6.1 Compiled using: APR 1.6.3, APR-UTIL 1.6.1 Architecture: 32-bit Server MPM: prefork threaded: no forked: yes (variable process count) Server compiled with.... -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_SYSVSEM_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=256 -D HTTPD_ROOT="/etc/httpd" -D SUEXEC_BIN="/etc/httpd/bin/suexec" -D DEFAULT_PIDLOG="/var/run/httpd/httpd.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="conf/mime.types" -D SERVER_CONFIG_FILE="conf/httpd.conf"
なので、設定ファイルは/etc/httpd/conf/httpd.conf
になります。
設定はだいたいそのままで動きます。 ただしセキュリティが保たれてるとかそういう意味ではないので注意。 そのまま動かすと
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 192.0.2.64. Set the 'ServerName' directive globally to suppress this message
と言われるので、言われたとおりhttpd.conf
に
ServerName = 192.0.2.64
などと書いておくといいでしょう。
起動はhttpd
を直接実行、終了はkill
でもいいですが、普通はapachectl
を使います。
$ /usr/sbin/apachectl start # 起動 $ /usr/sbin/apachectl stop # 終了
# documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # -DocumentRoot "/srv/www/htdocs" -<Directory "/srv/www/htdocs"> +DocumentRoot "/path/to/document/root" +<Directory "/path/to/document/root"> # # Possible values for the Options directive are "None", "All", # or any combination of:
# prevent Apache from glomming onto all bound IP addresses. # #Listen 12.34.56.78:80 -Listen 80 +Listen 8888 # # Dynamic Shared Object (DSO) Support
# is requested. # <IfModule dir_module> - DirectoryIndex index.html + DirectoryIndex index.html index.htm </IfModule> #
.htm
の拡張子自体は既にmime.types
の中に書かれているので、インデックスファイルindex.htm
だけ指定してやれば大丈夫。
まず、プロキシモジュールをロードします。 そうするとMutexがどーたらこーたら言われるので、Mutexの設定を変えます。 で、自分がプロキシになる設定を書いて、さらに上位プロキシに投げる設定を書きます。 こんな感じ。 オープンプロキシにならないように注意。
@@ -40,4 +40,5 @@ # # Mutex default:/var/run/httpd +Mutex file # @@ -128,8 +129,8 @@ LoadModule version_module modules/mod_version.so #LoadModule remoteip_module modules/mod_remoteip.so -#LoadModule proxy_module modules/mod_proxy.so -#LoadModule proxy_connect_module modules/mod_proxy_connect.so -#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so -#LoadModule proxy_http_module modules/mod_proxy_http.so +LoadModule proxy_module modules/mod_proxy.so +LoadModule proxy_connect_module modules/mod_proxy_connect.so +LoadModule proxy_ftp_module modules/mod_proxy_ftp.so +LoadModule proxy_http_module modules/mod_proxy_http.so #LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so #LoadModule proxy_scgi_module modules/mod_proxy_scgi.so @@ -533,2 +534,8 @@ </IfModule> +ProxyRemote * http://url.of.proxy.host:port/ +ProxyRequests On +<Proxy *> + Order deny,allow + Allow from 127.0.0.1 +</Proxy>
proxy_connect_module
はHTTPSリクエストをさばくのに必要。
ProxyRequests
がApache自身をプロキシとして動作させる設定で、ProxyRemote
がApacheがファイルを取りに行くときに使うプロキシの設定です。
これで、ブラウザのプロキシの設定を127.0.0.1:8888
としてやれば、一度Apacheにリクエストが飛んで、そこからさらにProxyRemote
で指定したプロキシにリクエストが飛ぶようになります。
ProxyRequests
はVirtualHost
の中にも書けるので、ひとつのApacheだけでコンテンツサーバーとプロキシサーバーをポートで振り分けることもできます。
なんでこんな設定をしたかというと、カイシャのプロキシが入れ替わったときに、AWS S3コマンドラインのリクエストを受け付けなくなってしまったから。
netcatで見るとs3
コマンドのリクエストヘッダにHost:
が入っていないかららしく、Apacheのプロキシアクセスモジュールはこれを補ってくれることが分かったので、ローカルでApacheをプロキシとして動かしておいて、Apache経由でカイシャのプロキシにアクセスさせるようにしてました(今は直った)。
Copyright (C) 2015-2019 akamoz.jp
$Id: cyghttpd.htm,v 1.5 2019/03/04 15:25:25 you Exp $