{"id":1540,"date":"2012-10-02T12:29:28","date_gmt":"2012-10-02T04:29:28","guid":{"rendered":"http:\/\/rmohan.com\/?p=1540"},"modified":"2012-10-02T12:30:33","modified_gmt":"2012-10-02T04:30:33","slug":"apache-minimal-to-learn","status":"publish","type":"post","link":"https:\/\/mohan.sg\/?p=1540","title":{"rendered":"Apache Minimal to Learn"},"content":{"rendered":"<p><strong>APACHE :-<\/strong><\/p>\n<p>Apache is an open source web server which guarantees availability of active websites online . The original version of apache was especially designed for unix-like operating system Nowadays, it can be implemented on variety of O.S. platforms. According to Apache Software Foundation and Net craft web server survey, 65% of websites on the internet uses Apache server.<\/p>\n<p>\u00a0Features of Apache :-<\/p>\n<p>1) Modularity<\/p>\n<p>2)Uniformity<\/p>\n<p>3)Portability<\/p>\n<p>4)Powerful and Flexible webserver<\/p>\n<p>5)Easily operable on wide variety of OS Platforms.<\/p>\n<p>which made possible technologies like apache modules an API for apache module enabling features such as PHP, Mysql integration, URL Rewrite, PHP Handlers, Global variables and other features.<\/p>\n<p>Apache Web Server Versions :-<\/p>\n<p>Apache 1.3 :-<\/p>\n<p>-Useful configuration files.<br \/>-Windows and Netware support<br \/>-DSO Support<br \/>-APXS tool (Basically APXS is located at \/usr\/local\/apache\/bin\/apxs\u00a0 and the APXS is a tool used for building and installing extension modules for Apache HTTP Server).<\/p>\n<p>Apache 2.0 :-<\/p>\n<p>-Most comprehensive configuration files.<br \/>-Efficiency<br \/>-Supports IPV6 version.<br \/>-Unix Threading<br \/>-Introduced new compilation system and multi-langauge error messaging.<\/p>\n<p>Apache 2.2 :-<\/p>\n<p>-Offers more and new flexible modules.<br \/>-User Authentication and Proxy caching features.<br \/>-SQL Support<br \/>-Support files exceeding 2Gb.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>You may felt boredom while reading below concept,\u00a0 But its the core and most important functional body of Apache.<\/p>\n<p>\u00a0MPM\u00a0 :-<\/p>\n<p>MPM stands for Multiple Processing Modules.\u00a0 The main purpose of MPM\u00a0 is binding network ports on machine, accepting request and dispatching children to handle the requets.<\/p>\n<p>Apache implements specialized MPM. MPM must be choosen while configuring and must be compiled in the server. MPM behaves like Apache module, the basic difference is only one MPM must be loaded into the server at any time.<\/p>\n<p>List of Apache MPM modules are available. Refer the link for the same :-<\/p>\n<p>http:\/\/httpd.apache.org\/docs\/2.0\/mod\/<\/p>\n<p>Some of the well know and widely implemented MPM&#8217;s :-<\/p>\n<p>1) Prefork :-<\/p>\n<p>&#8220;The prefork MPM runs multiple processes with each child process handling one connection&#8221;.<\/p>\n<p>Merits :-<\/p>\n<p>-Stable and Secure<br \/>-Compatible with all implementations (cgi, fcgi, suPHP, DSO).<br \/>-Failure of one process wont affect other connections.<\/p>\n<p>De-Merits :-<\/p>\n<p>-Simultaneous execution of multiple processes &gt;&gt; indicates more memory usage.<\/p>\n<p>A typical configuration of the process controls in the Preform MPM could look as follows:<\/p>\n<p>StartServers 8<br \/>MinSpareServers 5<br \/>MaxSpareServers 20<br \/>MaxClients 256<br \/>MaxRequestsPerChild 1000<\/p>\n<p>More Information<\/p>\n<p>2) Worker :-<\/p>\n<p>&#8220;The worker MPM has one control process that launches multi-threaded child processes which handles one connection per thread&#8221;.<\/p>\n<p>Merits :-<\/p>\n<p>-Multi-threaded design utilizes less memory usage irrespective of high connections.<br \/>-Fast performance.<\/p>\n<p>De-Merits :-<\/p>\n<p>-DSO Module Incompatible.<\/p>\n<p>A typical configuration of the process-thread controls in the Worker MPM could look as follows:<\/p>\n<p>ServerLimit 16<br \/>StartServers 2<br \/>MaxClients 150<br \/>MinSpareThreads 25<br \/>MaxSpareThreads 75<br \/>ThreadsPerChild 25<\/p>\n<p>More Information<\/p>\n<p>3) Event :-<\/p>\n<p>&#8220;The Event MPM is similar to worker MPM but allows high performance by passing some of the listener thread work\u00a0 to each work processes. Each process can act as worker or listener depending on need and activity in CPU for respective time&#8221;.<\/p>\n<p>Merits :-<\/p>\n<p>-Better optimization.<\/p>\n<p>De-Merits :-<\/p>\n<p>-DSO Module Incompatible.<\/p>\n<p>\u00a0A typical configuration of the process-thread controls in the Event MPM could look as follows:<\/p>\n<p>KeepAlive On<br \/>KeepAliveTimeout 2<br \/>MaxKeepAliveRequests 20<\/p>\n<p>More Information<\/p>\n<p>Distinguish between Perform, Worker, Event MPM&#8217;s<\/p>\n<p>Configurations Definitions :-<\/p>\n<p>* StartServers :- The number of\u00a0 child processes created\u00a0 on startup.<\/p>\n<p>*MinSpareServers : Minimum number of idle child processes. apache will continue to create new processes. This should be high enough, idle processes should be on hand.<\/p>\n<p>*MaxSpaceServers : Max number of idle child process, parent process will kill idle process in excess of limit.<\/p>\n<p>*MaxClients : Max number of simultaneous request i.e Max number of Apache requests.<\/p>\n<p>*MaxRequestsPerChild : Max number of request a child process will handle before it dies. if set to 0 ; process will never die<\/p>\n<p>*ServerLimit : Max number of child process, must be greater on equal to maxclient divided by thread per child.<\/p>\n<p>*ThreadsPerChild : No. of threads per child process.<\/p>\n<p>*MaxSpareThread : Min no.of idle thread.<\/p>\n<p>*KeepAlive ; allows for persistent connection to improve latency for connections that require multiple requests.<\/p>\n<p>*KeepAliveTimeout :\u00a0 Length of time connection will be kept open for further request before closing.<\/p>\n<p>*MaxKeepAliveRequests : Max no. of requests through a single keep alive connection.<\/p>\n<p>Mod_Deflate<br \/>Mod_Deflate :-<\/p>\n<p>mod_deflate is an module of an Apache HTTP Web Server. The basic purpose of mod_deflate is to speedup download web page access time. It provides DEFLATE output filter that allows output from webserver to webbrowser in the form of compression format.<\/p>\n<p>It results in faster website access and decreases the amount of time in data transmission from web server to web browser.<\/p>\n<p>mod_gzip or mod_gz modules are similar to mod_deflate which compresses the contents using different implementations like gzip implementations and external zlib library respectively.<\/p>\n<p>You can check the gzip compression for website using below link :-<\/p>\n<p>http:\/\/aruljohn.com\/gziptest.php<\/p>\n<p>How to Enable Mod_Deflate :-<\/p>\n<p>1) # \/scripts\/easyapache<\/p>\n<p>2) Adding the code under .htaccess file<\/p>\n<p>&lt;IfModule mod_deflate.c&gt;<br \/>\u00a0\u00a0\u00a0 AddOutPutFilterByType DEFLATE text\/html text\/plain text\/xml<br \/>\u00a0\u00a0\u00a0 &lt;IfModule mod_setenvif.c&gt;<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # Netscape 4.x has some problems&#8230;<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BrowserMatch ^Mozilla\/4 gzip-only-text\/html<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # Netscape 4.06-4.08 have some more problems<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BrowserMatch ^Mozilla\/4\\.0[678] no-gzip<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # MSIE masquerades as Netscape, but it is fine<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # BrowserMatch \\bMSIE !no-gzip !gzip-only-text\/html<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # the above regex won&#8217;t work. You can use the following<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # workaround to get the desired effect:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 BrowserMatch \\bMSI[E] !no-gzip !gzip-only-text\/html<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # Don&#8217;t compress images<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary<br \/>\u00a0\u00a0\u00a0 &lt;\/IfModule&gt;<br \/>\u00a0\u00a0\u00a0 &lt;IfModule mod_headers.c&gt;<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # Make sure proxies don&#8217;t deliver the wrong content<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Header append Vary User-Agent env=!dont-vary<br \/>\u00a0\u00a0\u00a0 &lt;\/IfModule&gt;<br \/>&lt;\/IfModule&gt;<\/p>\n<p>3) Append below code under httpd.conf<\/p>\n<p>LoadModule deflate_module modules\/mod_deflate.so<\/p>\n<p>Append following configuration &lt;Location \/&gt; directive:<\/p>\n<p>&lt;Location \/&gt;<br \/>AddOutputFilterByType DEFLATE text\/html text\/plain text\/xml<br \/>&#8230;.<br \/>&#8230;<br \/>&lt;Location&gt;<\/p>\n<p>Above line only compress html and xml files. Here is the configuration from one of my production box:<br \/>&lt;Location \/&gt;<br \/>&#8230;<br \/>&#8230;<br \/>AddOutputFilterByType DEFLATE text\/plain<br \/>AddOutputFilterByType DEFLATE text\/xml<br \/>AddOutputFilterByType DEFLATE application\/xhtml+xml<br \/>AddOutputFilterByType DEFLATE text\/css<br \/>AddOutputFilterByType DEFLATE application\/xml<br \/>AddOutputFilterByType DEFLATE image\/svg+xml<br \/>AddOutputFilterByType DEFLATE application\/rss+xml<br \/>AddOutputFilterByType DEFLATE application\/atom_xml<br \/>AddOutputFilterByType DEFLATE application\/x-javascript<br \/>AddOutputFilterByType DEFLATE application\/x-httpd-php<br \/>AddOutputFilterByType DEFLATE application\/x-httpd-fastphp<br \/>AddOutputFilterByType DEFLATE application\/x-httpd-eruby<br \/>AddOutputFilterByType DEFLATE text\/html<br \/>&#8230;<br \/>&#8230;<br \/>&lt;Location&gt;<br \/>Close and save the file. Next restart apache web server. All of the above extension file should compressed by mod_deflate:<\/p>\n<p># \/etc\/init.d\/httpd restart<\/p>\n<p>More Information<\/p>\n<p>Zip files corrupt when downloaded via IE but not via FF.<br \/>\u00a0 Firefox would download the zip and it was fine, but the file was coming through corrupt when downloading via Internet Explorer. This is a result of IE not handling gzip encoded files properly.<\/p>\n<p>RLimits<\/p>\n<p>RLimits<br \/>Resource limits, or RLimits, are sometimes appropriate on older hardware, or if a customer requests them specifically. It can only be set on\u00a0 VPS\/Dedicated servers.<\/p>\n<p>RLimits can be added to :-<br \/>\u00a0<br \/># \/usr\/local\/apache\/conf\/include\/pre_main_global.conf<\/p>\n<p>The most common entries are: Limits memory usage to 100MB. (note: will not work on VZ VPS)<\/p>\n<p>RLimitMEM 104857600 104857600<\/p>\n<p>Limits CPU usage.<\/p>\n<p>RLimitCPU 150 200<\/p>\n<p>Limits Number of processes per user (This is what regulates the process limits on shared servers).<\/p>\n<p>RLimitNPROC 25 30<\/p>\n<p>Mod_Expires\/_Cache\/_PageSpeed\/_Bandwidth\/_<\/p>\n<p>Mod_Expires<br \/>The mod_expires module allows Cache-Control and expires headers to be added to a site without any changes to the existing site code. You can determine if a site is already providing cache headers by checking the current site headers: No caching headers:<\/p>\n<p>~ $ curl -I http:\/\/www.hostgator.com<br \/>HTTP\/1.1 200 OK<br \/>Date: Wed, 22 Sep 2010 20:30:25 GMT<br \/>Server: Apache\/2.2.3 (CentOS)<br \/>Accept-Ranges: bytes<br \/>Content-Type: text\/html; charset=UTF-8<\/p>\n<p>Cloudflare&#8217;s caching headers:<br \/>HTML:<br \/>HTTP\/1.1 200 OK<br \/>Server: cloudflare-nginx<br \/>Date: Wed, 22 Sep 2010 20:19:51 GMT<br \/>Content-Type: text\/html; charset=UTF-8<br \/>Connection: keep-alive<br \/>ETag: &#8220;a568013-14dd2-490de3c42e8c0&#8221;<br \/>Accept-Ranges: bytes<br \/>Cache-Control: max-age=300, must-revalidate<br \/>Expires: Wed, 22 Sep 2010 20:24:48 GMT<\/p>\n<p>Image:<br \/>HTTP\/1.1 200 OK<br \/>Server: cloudflare-nginx<br \/>Date: Wed, 22 Sep 2010 20:19:56 GMT<br \/>Content-Type: image\/jpeg<br \/>Connection: keep-alive<br \/>Last-Modified: Tue, 03 Aug 2010 03:10:53 GMT<br \/>ETag: &#8220;a5683b0-10558-48ce2aa35e940&#8221;<br \/>Accept-Ranges: bytes<br \/>Content-Length: 66904<br \/>Expires: Wed, 22 Sep 2010 22:19:56 GMT<br \/>Cache-Control: max-age=7200<\/p>\n<p>Note how the image is being cached for 2 hours while the html is only being cached for 5 minutes. You can reproduce those settings with the following .htaccess rules.<\/p>\n<p>&lt;filesmatch &#8220;\\.(flv|gif|ico|jpg|jpeg|png|swf)$&#8221;&gt;<br \/>\u00a0\u00a0\u00a0 header set Cache-Control &#8220;max-age=2592000&#8221;<br \/>&lt;\/filesmatch&gt;<br \/>&lt;filesmatch &#8220;\\.(css|js|pdf|txt)$&#8221;&gt;<br \/>\u00a0\u00a0\u00a0 header set Cache-Control &#8220;max-age=604800&#8221;<br \/>&lt;\/filesmatch&gt;<br \/>&lt;filesmatch &#8220;\\.(html|htm)$&#8221;&gt;<br \/>\u00a0\u00a0\u00a0 header set Cache-Control &#8220;max-age=43200&#8221;<br \/>&lt;\/filesmatch&gt;<br \/>&lt;filesmatch &#8220;\\.(cgi|fcgi|php|pl|scgi|spl)$&#8221;&gt;<br \/>\u00a0\u00a0\u00a0 header unset Cache-Control<br \/>\u00a0\u00a0\u00a0 &lt;ifmodule mod_expires.c&gt;<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 expiresactive off<br \/>\u00a0\u00a0\u00a0 &lt;\/ifmodule&gt;<br \/>&lt;\/filesmatch&gt;<br \/>&lt;ifmodule mod_expires.c&gt;<br \/>\u00a0\u00a0\u00a0 expiresdefault &#8220;access plus 1 year&#8221;<br \/>&lt;\/ifmodule&gt;<\/p>\n<p>Mod_Cache and Mod_Pagespeed<\/p>\n<p>mod_pagespeed<br \/>mod_pagespeed is an Apache module that adjusts html output to help the page render faster in the clients browser and performs some caching for the output as well. Some of the more common tasks would be removing whitespaces between html code, unifying CSS and java scripts into one file, gziping and rearranging the html on the page.<\/p>\n<p>Install script:<\/p>\n<p>GET http:\/\/hgfix.net\/heckel\/install-pagespeed | bash<\/p>\n<p>Mod_Bandwidth :-<\/p>\n<p>&#8220;Mod_bandwidth&#8221; is a module for the Apache HTTP webserver that enable the setting of server-wide or per connection bandwidth limits, based on the directory, size of files and remote IP\/domain.<\/p>\n<p>You can find the specific file types affected and other configuration settings in the &#8220;\/usr\/local\/apache\/conf\/includes\/mod_bandwidth.conf&#8221; file.<\/p>\n<p>Mod Security<br \/>mod_sec is the important module of an Apache web Server which is concerned with security. Shared\/reseller servers run mod_security. mod_security is a real-time, application layer, web-application firewall that runs as an apache module.<\/p>\n<p>\u00a0The mod_security system watches each connection and looks for suspicious use\/access based on defined rule sets. When a connection matches a rule set, the connection is blocked with an error (almost always a 403 (forbidden) error). Unfortunately, mod_security &#8211; by its very nature &#8211; has to be strict. This means that occasionally, a customer&#8217;s legitimate script use will be caught by mod_security. In those instances, we will have to white list the rules being hit in order for the script to continue to function.<\/p>\n<p>Step 1: Determine which rule to whitelist. First, you must tail the apache error_log and determine which mod_security rule(s) need to be whitelisted. The easiest way to do this is with the command:<\/p>\n<p>tail -f \/usr\/local\/apache\/logs\/error_log | grep &#8216;216.110.94.228&#8217;<\/p>\n<p>Once you have that running, reload the page. You will see something similar to the following appear:<br \/>[Mon Feb 15 20:59:28 2010] [error] [client 216.110.94.227] ModSecurity: Access denied with code 403 (phase 2). Pattern match &#8220;(?:http|https|ftp):\/&#8221; at REQUEST_URI. [file &#8220;\/opt\/mod_security\/98_asl_jitp.conf&#8221;] [line &#8220;881&#8221;] [id &#8220;1234234&#8221;] [rev &#8220;1&#8221;] [msg &#8220;JITP:1234234&#8221;] [severity &#8220;CRITICAL&#8221;] [hostname &#8220;www.hilili.com&#8221;] [uri &#8220;\/tgp\/st\/st.php&#8221;] [unique_id &#8220;S3oKEK546YIAABcnxBAAAABK&#8221;]<\/p>\n<p>Step 2: Determine the rule # being hit and white list Find the rule number, which would be the ID. In this case, the ID is highlighted, above. 1234234. Once you find the ID\/rule, you will whitelist with the command: wlmodsec domain.tld rule# y\/n In this case, you would use: wlmodsec hilili.com 1234234 y The y\/n allows you to choose whether or not to automatically restart apache after the rule is whitelisted. This way, if you are whitelisting several domains (say a customer requests all of their domains be whitelisted against a specific rule), you can run it in a loop without having to restart after each whitelist. A loop would look similar to the following:<\/p>\n<p>while read -r DOMS; do wlmodsec $DOMS 1234234 n; done &lt; domain-list<\/p>\n<p>After which, you would restart apache, manually.<\/p>\n<p>Step 3: Repeat until all rules are found\/whitelisted. You&#8217;ve found on rule. Where one rule is hit, invariably there are more. Go back to step 1, and repeat until you can reload the page (or repeat the process) without triggering an error. Whitelist each rule that you trigger. It is also possible to disable mod_security, completely, for a domain; however, we do not recommend this. If a customer is wishing to do this, it must be handled by an upper tier administrator It you need to manually edit the rules they are in<\/p>\n<p>\/opt\/mod_security\/whitelist.conf<\/p>\n<p>Example (need to replace domain.com and ruleid):<\/p>\n<p>SecRule SERVER_NAME &#8220;domain.com&#8221; phase:1,nolog,pass,ctl:ruleRemoveByID=ruleid <br \/>Example whitelisting a rule affecting a temporary url (replace username and ruleid): <br \/>SecRule REQUEST_URI &#8220;~username&#8221; phase:1,nolog,pass,ctl:ruleRemoveByID=ruleid Error <br \/>Message: ModSecurity: Unable to retrieve collection (name &#8220;global&#8221;, key &#8220;global&#8221;). <br \/>Use SecDataDir\u00a0 to define data directory first. mkdir -p \/var\/asl<\/p>\n<p>mkdir -p \/var\/asl\/data\/<br \/>mkdir -p \/var\/asl\/data\/msa<br \/>mkdir -p \/var\/asl\/data\/audit<br \/>mkdir -p \/var\/asl\/data\/suspicious<br \/>chown nobody.nobody \/var\/asl\/data\/msa<br \/>chown nobody.nobody \/var\/asl\/data\/audit<br \/>chown nobody.nobody \/var\/asl\/data\/suspicious<br \/>chmod o-rx -R \/var\/asl\/data\/*<br \/>chmod ug+rwx -R \/var\/asl\/data\/*<\/p>\n<p>Then we need to add following lines to \/usr\/local\/apache\/conf\/modsec2.user.conf<\/p>\n<p>SecUploadDir \/var\/asl\/data\/suspicious<br \/>SecDataDir \/var\/asl\/data\/msa<br \/>SecTmpDir \/tmp<br \/>SecAuditLogStorageDir \/var\/asl\/data\/audit Error Message: Rule execution error &#8211; PCRE limits exceeded (-8): (null). Add this to php.ini:<br \/>pcre.backtrack_limit = 50000<br \/>pcre.recursion_limit = 50000 Add this to modsec2.user.conf<\/p>\n<p>SecPcreMatchLimit 50000<br \/>SecPcreMatchLimitRecursion 5000<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>APACHE :-<\/p>\n<p>Apache is an open source web server which guarantees availability of active websites online . The original version of apache was especially designed for unix-like operating system Nowadays, it can be implemented on variety of O.S. platforms. According to Apache Software Foundation and Net craft web server survey, 65% of websites on the [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"_links":{"self":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/1540"}],"collection":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1540"}],"version-history":[{"count":2,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/1540\/revisions"}],"predecessor-version":[{"id":1543,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/1540\/revisions\/1543"}],"wp:attachment":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1540"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1540"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1540"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}