标签归档:apache

Apache ProxyPass WebSocket 转发

使用 https 相对的也应该使用 wss ,使用 apache 将 ws 转为 wss ,在 apache 中建立一个新的配置,内容如下:

端口、域名、证书根据自己的情况修改。

Listen 20443  // 自定义端口需要打开侦听
<VirtualHost *:20443>
    ServerName mysite.com
    ServerAlias www.mysite.com

    SSLEngine On
    SSLProxyEngine On
    ProxyRequests Off

    SSLCertificateFile /etc/apache2/ssl/mysite.com.crt
    SSLCertificateKeyFile /etc/apache2/ssl/mysite.com.key
    SSLCertificateChainFile /etc/apache2/ssl/ca.cer

    ProxyPass / http://localhost:3999/  // 如果来源是 WebSocket 应该改为 ws://
    ProxyPassReverse / http://localhost:3999/  // 同上

    RewriteEngine on
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
    RewriteRule .* ws://localhost:3999%{REQUEST_URI} [P]
</VirtualHost>

apache .htaccess 301重定向规则

单文件的重定向

适用于网站结构调整,而又完成URL权重的传递。

同域名下将example.com/oldfile.htm重定向至 example.net/newfile.htm

Redirect 301 /oldfile.htm /newfile.htm

将文件重定向至不同域名下,如 example.com/oldfile.htm 重定向至 example.net/newfile.htm

继续阅读

apache启用ssl安全访问

首先申请 ssl证书,可以在 腾讯云阿里云利用Let’s Encrypt创建 。这里以 腾讯云 为例。

  1. 启用 ssl 模块
sudo a2enmod ssl
  1. 将得到的证书文件放到确定的目录,如统一放在 /etc/apache2/ssl
  2. 就地复制 default-ssl.conf ,然后修改新文件中的 域名DocumentRoot证书路径,如:
<IfModule mod_ssl.c>
        <VirtualHost *:443>
                ServerAdmin webmaster@localhost
                ServerName domain.com

                DocumentRoot /var/www/html

                ErrorLog ${APACHE_LOG_DIR}/domain.com-ssl-error.log
                CustomLog ${APACHE_LOG_DIR}/domain.com-ssl-access.log combined

                SSLEngine on

                SSLCertificateFile      /etc/apache2/ssl/2_domain.com.crt
                SSLCertificateKeyFile /etc/apache2/ssl/3_domain.com.key
                SSLCertificateChainFile /etc/apache2/ssl/1_root_bundle.crt

                #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>
        </VirtualHost>
</IfModule>
  1. 修改站点根目录下 .htaccess 文件,添加以下代码,实现 http 自动跳转到 https:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R=301,L]
</IfModule>

在 Ubuntu 上配置和优化 Apache

你可以在 Apache 上做各种各样的配置,但是主要的和最常见的配置将在下面做出解释。

检查 Apache 是否正在运行

默认情况下,Apache 设置为在机器启动时自动启动,因此你不必手动启用它。你可以使用以下命令检查它是否正在运行以及其他相关信息:

systemctl status apache2

check if apache is running
check if apache is running

并且你可以检查你正在使用的版本:

apachectl -V

一种更简单的检查方法时访问服务器的 IP 地址,如果你得到默认的 Apache 页面,那么一切都正常。

继续阅读

通用的 apache vhost 配置文件

Listen 88                                                   # 侦听端口号,默认是80,不能重复,会报错

Alias /db /home/www/phpmyadmin    # 别名访问,如 http://localhost/db

<VirtualHost *:88>                                         # 这里的端口号必须已经开放侦听
    #ServerAdmin webmaster@host.example.com          # 管理员联系方式,可不写
    DocumentRoot "/xampp/htdocs/project/public"      # 虚拟主机的根目录
    #ServerName host.example.com                        # 虚拟主机域名(或IP)
    #ServerAlias www.host.example.com                  # 虚拟主机域名别名,*表示通配
    ErrorLog "logs/project-error.log"                  # 虚拟主机错误日志
    CustomLog "logs/project-access.log" common       # 虚拟主机访问日志


    <Directory /home/www/phpmyadmin>                    # 设置虚拟主机主目录的访问限制属性
        Options FollowSymLinks
        DirectoryIndex index.php                         # 默认脚本
        Order Deny,Allow                                   # 访问权限优先级
        Deny from All                                       # 禁止所有用户(All),或填写IP,或IP段(如 192.168.1.0/24)
        Allow from 192.168.1.0/24                            # 允许指定IP段
        Allow from 192.168.0.0/16;                           # 可允许多个指定IP段
        Allow from 172.16.0.0/12;
        Allow from 10.0.0.0/8;
        Allow from 127.0.0.0/8;

        <IfModule mod_php5.c>                              # php 脚本执行权限和配置
                AddType application/x-httpd-php .php

                php_flag magic_quotes_gpc Off
                php_flag track_vars On
                php_flag register_globals Off
                php_admin_flag allow_url_fopen Off
                php_value include_path .
                php_admin_value upload_tmp_dir /tmp
                php_admin_value open_basedir /usr/share/library/
        </IfModule>

    </Directory>

</VirtualHost>

apache 反向代理

要先启用组件:a2enmod rewrite proxy ,确认开启以下组件: proxyproxy_connecthttp

<VirtualHost *:80>
        AllowEncodedSlashes On
        ProxyPass / http://localhost:88/
        ProxyPassReverse / http://localhost:88/
</VirtualHost>

网站排障分析常用的命令

系统连接状态篇:
1.查看TCP连接状态
netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rn

netstat -n | awk ‘/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}’ 或
netstat -n | awk ‘/^tcp/ {++state[$NF]}; END {for(key in state) print key,”\t”,state[key]}’
netstat -n | awk ‘/^tcp/ {++arr[$NF]};END {for(k in arr) print k,”\t”,arr[k]}’

netstat -n |awk ‘/^tcp/ {print $NF}’|sort|uniq -c|sort -rn

netstat -ant | awk ‘{print $NF}’ | grep -v ‘[a-z]’ | sort | uniq -c
继续阅读